如何为令牌交换验证码?

时间:2017-11-16 21:15:28

标签: c# oauth oauth-2.0 postman

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

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

  1. 客户端将GET请求发送到oauth服务器授权端点。
  2. oauth服务器验证客户端和回调网址
  3. oauth服务器将查询字符串中的auth代码发送给callbackurl。
  4. 客户端(callbackurl)向令牌端点发出POST请求,其grant_type为authorization_code,其中包含请求正文中的代码。
  5. OAuth服务器向客户端返回可用于请求的令牌。
  6. 我的代码中触发的最后一个方法是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请求将后续请求发送到我的令牌端点。两种方法都产生相同的结果。

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

    1. OAuthAuthorizationServerProvider - ValidateClientAuthentication
    2. AuthenticationTokenProvider - 接收
    3. 在receive方法中,我在调用context.DeserializeTicket(value)之前验证代码是否有效。

      我理解ReceiveCode方法除了启动令牌创建过程之外,还要从数据存储中删除一次性使用代码....但我不确定。

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

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

0 个答案:

没有答案