Неверный код авторизации IdentityServer4{«код»:

#oauth-2.0 #identityserver4

#oauth-2.0 #identityserver4

Вопрос:

Я получаю неверный код авторизации{«code»: «MyTestCode»},

Вот более подробная ошибка: Неверный код авторизации{«code»: «MyTestCode»}, подробности: {«ClientID»: «AuthorizationCodeClientFlow», «ClientName»: «Код авторизации клиента», «GrantType»: «authorization_code», «Scopes»: null, «AuthorizationCode»: «MyTestCode», «refreshToken»: null, «UserName»: null , «AuthenticationContextReferenceClasses»: null, «Tenant»: null, «IdP»: null, «Raw»: {«grant_type»: «authorization_code», «code»: «MyTestCode», «redirect_uri»: «https://localhost:5000/oauth/callback «, «client_id»: «AuthorizationCodeClientFlow»}, «$type»: «TokenRequestValidationLog»}TokenRequestValidator>

Я тестирую с помощью Postman введите описание изображения здесь

Это клиент, созданный на основе этого кода :

             {
                ClientName = "Authorization Code Client",
                ClientId = "AuthorizationCodeClientFlow",
                AllowedGrantTypes = GrantTypes.Code,
                ClientSecrets =
                  {
                    new Secret("AuthorizationCodeClientFlowSecret".Sha512())
                  },
                AllowedScopes =
                  {
                    "all"
                  },
                RedirectUris =
                  new List<string> {
                       "https://localhost:5000/oauth/callback"
                  },
                AllowOfflineAccess = false,
                AccessTokenLifetime = 60
            };
  

https://localhost:5105/oauth/authorize работает нормально. Я получаю ошибку в https://localhost:5105/oauth/token шаг. Когда я проверяю запрос таким образом:

 var form = (await _httpContextAccessor.HttpContext.Request.ReadFormAsync()).AsNameValueCollection();

            var validationResult = await _requestValidator.ValidateRequestAsync(form, clientResult);

            if (validationResult.IsError)
            {
                return new IdpTokenResponse
                {
                    Custom = new Dictionary<string, object>
                      {
                        { "Error", validationResult.Error },
                        { "ErrorDescription", validationResult.ErrorDescription }
                      }
                };
            }
  

Ответ №1:

Вам нужно взять код авторизации, который вы получаете из первоначального запроса на аутентификацию, а затем взять его и передать вместе с ним, когда вы получаете токен от конечной точки токена.

одна несвязанная вещь заключается в том, что вы всегда должны запрашивать область OpenID при аутентификации на IdentityServer, All или «» недопустимо.

Комментарии:

1. Отлично! Не стесняйтесь отмечать ответ как приемлемый 🙂