我需要提取生成的令牌并将其存储在数据库中。
在OAuth 2.0中是否有任何方法可以在响应中发送生成的令牌之前获取它?
或者有没有办法分析owin api发送的认证响应?
答案 0 :(得分:2)
注意到还没有人回答这个问题,我自己也在寻找答案!
最终想通了,所以这是我对StackOverflow的第一个贡献!
我为我的OWIN中间件使用自定义类(SimpleAuthProvider):
OAuthAuthorizationServerOptions oAuthAuthorizationServerOptions = new OAuthAuthorizationServerOptions();
oAuthAuthorizationServerOptions.TokenEndpointPath = new PathString("/api/token");
oAuthAuthorizationServerOptions.Provider = new SimpleAuthProvider();
请注意我在项目中声明的这门课程:
public class SimpleAuthProvider:OAuthAuthorizationServerProvider
Microsoft.Owin.Security.OAuth的一部分!我假设您使用的是相同的,但这种方法在OAuth实现中可能类似。
要获取令牌并将其存储在数据库中,请覆盖以下内容:
public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext ctx) {
//...get _customer database context (in my case, this happens earlier)
_customer.LastIssuedToken = ctx.AccessToken;
_db.SaveChanges();
return base.TokenEndpointResponse(ctx);
}
答案 1 :(得分:0)
如果您使用的是Microsoft.Owin.Security.OAuth 2.1.0,则必须使用Nuget软件包管理器将其更新为3.0.0(顺便说一句,我使用的是3.1.0且运行良好)。 TokenEndpointResponse和OAuthTokenEndpointResponseContext在2.0中不可用。然后使用此功能,您将在上下文中获得价值。
public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context)
{
string token = context.AccessToken;
return base.TokenEndpointResponse(context);
}