.Net Core OpenID Connect 使用第三方提供商

Posted

技术标签:

【中文标题】.Net Core OpenID Connect 使用第三方提供商【英文标题】:.Net Core OpenIDConect using third party provider 【发布时间】:2021-11-01 07:48:09 【问题描述】:

我在 .Net core 3.1 上,使用 OpenIDConnect 进行身份验证,这是我的 startup.cs

  public void ConfigureServices(IServiceCollection services)
        
           
            services.AddAuthentication(options =>
            
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            )
           .AddCookie()
           .AddOpenIdConnect("test",o =>
           
               o.SignInScheme = "Cookies";
               o.SignOutScheme = "Cookies";
               o.ClientId = "test";
               o.ClientSecret = "gs";
               o.Authority = "https://test";
               o.ResponseType = OpenIdConnectResponseType.CodeIdToken;
             o.MetadataAddress = "https://test/.well-known/openid-configuration";
              o.SaveTokens = true;
               o.GetClaimsFromUserInfoEndpoint = true;
               o.Scope.Add("openid");
               o.Scope.Add("profile");
           );


            services.AddControllersWithViews();
            services.AddRazorPages();
        

这是我的 Home 控制器和动作 Login with [Authorize] 属性

 [Authorize]
    public IActionResult Login()
    
      
        return View();
    

登录按钮位于主文件夹 Index.cshtml

<a asp-controller="Home" asp-action="Login" target="_self" role="menuitem" class="btn btn-primary" type="button" id="btnLogin" aria-label="Log in to your account">LogIn</a>

当我点击登录按钮时,这是错误:

没有找到该网址的网页:https://localhost:34343/Account/Login?ReturnUrl=%2FHome%2FLogin

为什么要进入帐户/登录?

【问题讨论】:

【参考方案1】:

尝试替换

options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;

通过

options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;

【讨论】:

no-authenticationscheme-was-specified-and-there-was-no-defaultchallengescheme,这是错误 无法让 OpenID 与第三方身份服务器一起工作。有什么建议吗? 所以添加这个:options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; 这是错误消息“InvalidOperationException:未指定 authenticationScheme,并且未找到 DefaultChallengeScheme。可以使用 AddAuthentication(string defaultScheme) 或 AddAuthentication(Action configureOptions) 设置默认方案。” 这就是我的 startup.cs 的样子 services.AddAuthentication(options => options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; )

以上是关于.Net Core OpenID Connect 使用第三方提供商的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core OpenID Connect 中的单点注销

.Net Core 2 OpenID Connect 身份验证和多个身份

ASP .NET Core OpenID Connect - 在外部登录后发出我自己的 cookie?

同一站点中的 asp net core 2.0 JWT 和 Openid Connect 身份验证

Asp.Net Core API OpenId-Connect 身份验证与 JWT 令牌使用 IdentityModel

OpenID Connect 与 ASP NET Core 3.1 没有众所周知的 URL