在返回响应之前获取 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似乎只在邮递员结果中看不到它。

令牌不是永远有效的。每次身份验证都会提供一个新令牌,并在设定的时间内有效。将此令牌保存到数据库是没有用的。

当然可以。 您只需要覆盖TokenEndpointResponseauthServerProvider : 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);
}

最新更新