Майкрософт.AspNetCore.Аутентификация.OpenIdConnect выдает ошибку «Не удалось проанализировать тело ответа токена как JSON»

#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» ошибка исчезла, и все работало нормально.