我正在配置我的OAUTH2服务器以支持authorization_code流程,但是我试图交换access_token的访问代码 . 每次我测试电话时都会收到invalid_grant错误 .

以下是我理解工作流程的方法:

  • 客户端将GET请求发送到oauth服务器授权 endpoints .

  • oauth服务器验证客户端和回调URL

  • oauth服务器将查询字符串中的auth代码发送给callbackurl .

  • 客户端(callbackurl)向grant令牌发出POST请求,其grant_type为authorization_code,请求主体中包含代码 .

  • OAuth服务器向客户端返回可用于请求的令牌 .

在我的代码中触发的最后一个方法是AuthenticationTokenProvider.Receive方法,但我收到invalid_grant错误而不是生成令牌 . 我认为这个方法应该在某个地方触发另一个调用,也许我只是在我的配置中遗漏了一些东西 .

以下是我在环境中配置OAuth的方法:

var oAuthServerOptions = new OAuthAuthorizationServerOptions()
            {
                AllowInsecureHttp = allowInsecureHttp,
                TokenEndpointPath = new PathString("/oauth2/token"),
                AuthorizeEndpointPath = new PathString("/oauth2/authorize"),
                AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
                Provider = new CustomOAuthProvider(HlGlobals.Kernel),
                AccessTokenFormat = new CustomJwtFormat(_baseUrl, HlGlobals.Kernel),
                AuthorizationCodeProvider = new SimpleAuthenticationTokenProvider()
            };


            // OAuth 2.0 Bearer Access Token Generation
            app.UseOAuthAuthorizationServer(oAuthServerOptions);

我能够获得一个授权代码,该代码可以毫无问题地发送到回调网址 .

在邮递员里面我使用https://www.getpostman.com/oauth2/callback作为我的回调网址 . 但是,我也尝试通过postman POST请求将后续请求发送到我的令牌 endpoints . 两种方法都产生相同的结果 .

第二个调用,对oauth服务器的POST调用,包括正文中的代码,在返回400之前触发以下事件:

  • OAuthAuthorizationServerProvider - ValidateClientAuthentication

  • AuthenticationTokenProvider - 接收

在receive方法中,我在调用context.DeserializeTicket(value)之前验证代码是否有效 .

我理解ReceiveCode方法的目的是从数据存储中删除一次性使用代码,除了开始令牌创建过程....但我不确定 .

有关我缺少什么的想法,以及如何使用authorization_code grant_type实现服务器代码以交换auth代码的auth代码?

我很乐意根据要求提供任何其他信息 . 谢谢!