【问题标题】:get OWIN bearer token before returning the response在返回响应之前获取 OWIN 不记名令牌
【发布时间】:2019-08-30 21:42:21
【问题描述】:

我已经使用 OWIN 和不记名令牌实现了身份验证,并且在用户登录时可以正常工作。

当调用 \Token URL 并将用户名/密码传递给它时,会给出令牌作为响应。但是我想将此令牌存储在数据库中,所以我可以在代码中获取令牌,而不是再次调用服务器吗?我无法获取票证或任何其他对象中生成的令牌的值。

             public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{ 
return Task.Factory.StartNew(() =>
 {

var username = context.UserName;

            var password = context.Password;


            var userService = new UserService();
            User user = userService.GetUserByCredentials(username, password);
            if (user != null)
            {
                var claims = new List<Claim>()
                {
                    new Claim(ClaimTypes.Name, user.userName),
                    new Claim("UserID", user.userName)
                };

                ClaimsIdentity oAutIdentity = new ClaimsIdentity(claims, Startup.OAuthOptions.AuthenticationType);


              var ticket = new AuthenticationTicket(oAutIdentity, new AuthenticationProperties() { });

         context.Validated(ticket);

            }
            else
            {
                context.SetError("invalid_grant", "Error");
            }
        });
    }

我正在调试代码,但令人惊讶的是,access_token 似乎无处可见,只能在邮递员结果中获取。

【问题讨论】:

  • 你用下面的方法试过了吗?

标签: c# .net oauth-2.0 owin


【解决方案1】:

令牌不是永久有效的。每次身份验证都会给出一个新令牌,并且在一定时间内有效。将此令牌保存到数据库没有任何用处。

【讨论】:

  • 实际上,在我的场景中,我在登录时进行了额外的业务逻辑检查,仅用户名和密码验证是不够的。使用 OAuth2.0,我只能传递用户名和密码,而不能传递其他参数,因此我需要存储令牌以运行其他业务逻辑。我知道令牌会过期。您知道如何通过代码获取令牌吗?
  • 您提到您在邮递员中看到了令牌。您将什么网址放入邮递员以获得这些结果?我想我是在问您在哪个身份验证阶段看到来自 API 的响应,其中包含令牌。
  • 我正在调用 http:localhost/token 并发送用户名和密码
  • 这可能是你需要走的路线:stackoverflow.com/questions/38494279/…
【解决方案2】:

当然可以。 您只需要在您的authServerProvider : OAuthAuthorizationServerProvider 中覆盖方法TokenEndpointResponse

OAuthTokenEndpointResponseContext 内部,有一个名为accessToken 的字段,您可以检索令牌值。

   public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context)
        {
            // Summary:
            //     Called before the TokenEndpoint redirects its response to the caller.
            return Task.FromResult<object>(null);
        }

【讨论】:

    猜你喜欢
    • 2014-01-04
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多