2 回答
TA贡献1877条经验 获得超1个赞
默认情况下,Google 身份验证实现使用response_type=code
. 有了这个流程,你就没有id_token
回应了。拥有它,response_type
应该是response_type=code id_token
(从这里)。
您可以BuildChallengeUrl
在派生YourGoogleHandler
类中覆盖该方法,并将 DI 注册从 更改.AddGoogle()
为
.AddOAuth<GoogleOptions, YourGoogleHandler> (GoogleDefaults.AuthenticationScheme, GoogleDefaults.DisplayName, googleOptions)
(代码取自Microsoft.AspNetCore.Authentication.Google/GoogleExtensions.cs
TA贡献1824条经验 获得超5个赞
对我有用的解决方案..
services.AddAuthentication()
.AddOpenIdConnect(GoogleDefaults.AuthenticationScheme,
GoogleDefaults.DisplayName,
options =>
{
options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
options.Authority = "https://accounts.google.com";
options.ClientId = googleOAuthSettings.ClientId;
options.ClientSecret = googleOAuthSettings.ClientSecret;
options.ResponseType = OpenIdConnectResponseType.IdToken;
options.CallbackPath = "signin-google";
options.SaveTokens = true; //this has to be true to get the token value
options.Scope.Add("email");
});
Google OAuth 的 OpenIdConnect 提供程序允许我们自定义 ResponseType。
根据链接,OpenIdConnectHandler 似乎实现了 IAuthenticationSignOutHandler。所以这就是为什么无论发现文档中有什么(支持或不支持结束会话端点),如果您使用 AddOpenIdConnect(...),它将始终注册一个看似支持注销的处理程序。如果您正在使用任何 IdentityServer4 快速入门,那么您可以通过检查 AccountService.cs --> BuildLoggedOutViewModelAsync 方法中的条件来消除该错误。
var providerSupportsSignOut = await _httpContextAccessor.HttpContext.GetSchemeSupportsSignOutAsync(idp)
在这里,我们可以添加额外的检查,如: idp != Google.
- 2 回答
- 0 关注
- 213 浏览
添加回答
举报