在返回响应之前获取OWIN承载令牌

时间:2019-04-09 14:43:10

标签: c# .net oauth-2.0 owin

我已经使用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似乎只有在邮递员结果中才能看到。

2 个答案:

答案 0 :(得分:1)

该令牌永远无效。每次身份验证都会给出一个新令牌,并且该令牌在一定时间内有效。将此令牌保存到数据库没有用。

答案 1 :(得分:0)

可以。 您只需要在TokenEndpointResponse内覆盖方法authServerProvider : OAuthAuthorizationServerProvider

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

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