【问题标题】:IdentityServer4 Invalid authorization code{"code":IdentityServer4 无效的授权码{"code":
【发布时间】:2020-12-31 23:52:42
【问题描述】:

我收到无效的授权码{"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”,“代码”:“MyTestCode”、“redirect_uri”:“https://localhost:5000/oauth/callback”、“client_id”:“AuthorizationCodeClientFlow”}、“$type”:“TokenRequestValidationLog”}

我正在使用 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 }
                      }
                };
            }

【问题讨论】:

    标签: oauth-2.0 identityserver4


    【解决方案1】:

    您需要获取从初始身份验证请求中收到的授权代码,然后在您从令牌端点获取令牌时将其传递。

    一件不相关的事情是,当您针对 IdentityServer 进行身份验证时,您应该始终要求提供 openid 范围,All 或“”无效。

    【讨论】:

    • 太棒了!随意将答案标记为可接受:)
    猜你喜欢
    • 2021-05-31
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 2020-11-29
    • 1970-01-01
    • 2017-01-24
    相关资源
    最近更新 更多