Microsoft.AspNetCore.Authentication.OpenIdConnect 抛出"Failed to parse token response body as JSON"错误



我正在尝试实现对OpenIdConnect服务的登录。为此,我在Startup.cs中添加了以下代码:

services.AddAuthentication(options => {
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options => {
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.Authority = identityUrl.ToString();
options.SignedOutRedirectUri = callBackUrl.ToString();
options.ClientId = "xxx";
options.ClientSecret = "yyy";
options.AuthenticationMethod = OpenIdConnectRedirectBehavior.RedirectGet;
options.ResponseType = OpenIdConnectResponseType.Code;
options.ResponseMode = OpenIdConnectResponseMode.Query;
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.CorrelationCookie = new Microsoft.AspNetCore.Http.CookieBuilder();
options.Events = new OpenIdConnectEvents {
OnAuthenticationFailed = context => {
context.HandleResponse();
context.Response.Redirect("/");
return Task.CompletedTask;
}
};
options.Scope.Add("openid");
});

我被重定向到外部登录页面,可以输入我的凭据。然后,事件";OnAuthenticationFailed";引发错误:

"无法将令牌响应正文解析为JSON。状态代码:400。内容类型:text/html/;

在一段时间后;谷歌研究";,我仍然不知道如何解决这个问题。。。这就是我在这里寻求帮助的原因。提前感谢任何形式的提示或提示。

我想明白了。如果有人面临同样的问题,这里是我的解决方案:

问题是,在服务提供商上,令牌端点身份验证模式被设置为"0";client_secret_basic";而不是";client_secret_post";。因此,令牌没有保存在主体中,因此解析失败。在变为";client_secret_post";,错误消失了,一切都很好。

相关内容

最新更新