如何获得在owin API中创建的oauth访问令牌?

时间:2015-04-10 06:20:30

标签: c# asp.net oauth-2.0 asp.net-web-api owin

我需要提取生成的令牌并将其存储在数据库中。
在OAuth 2.0中是否有任何方法可以在响应中发送生成的令牌之前获取它? 或者有没有办法分析owin api发送的认证响应?

2 个答案:

答案 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);
 }