#asp.net-core #openid-connect
#asp.net-core #openid-connect
Вопрос:
Я пытаюсь реализовать вход в службу 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. Тип содержимого: текст / html»
После некоторых «исследований Google» я все еще понятия не имею, как исправить эту проблему… Вот почему я прошу здесь о некоторой помощи. Заранее спасибо за любой намек или подсказку.
Комментарии:
1. используйте такой инструмент, как telerik.com/download/fiddler чтобы захватить необработанный HTTP-трафик и опубликовать копию неудачного запроса в вопросе.
Ответ №1:
Я понял это. Если кто-то сталкивается с такой же проблемой, вот мое решение:
Проблема заключалась в том, что у поставщика услуг режим аутентификации конечной точки токена был установлен на «client_secret_basic» вместо «client_secret_post». Таким образом, токен не был сохранен в теле, и поэтому синтаксический анализ не удался. После изменения на «client_secret_post» ошибка исчезла, и все работало нормально.