.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