从自定义标头中检索访问令牌

Posted

技术标签:

【中文标题】从自定义标头中检索访问令牌【英文标题】:Retrieve access token from a customised header 【发布时间】:2016-08-27 07:11:50 【问题描述】:

在我的 Web API 中,我想从请求中的 Cookies 标头中获取访问令牌,然后对令牌进行验证。目前,IdentityServer3.AccessTokenValidation 包用于验证 Bearer 令牌,它仅从 Authorization 标头中查找令牌。最好我想继续使用相同的不记名令牌验证过程,但是从 Cookies 标头中获取令牌,这听起来可以用方便的代码吗?谢谢

【问题讨论】:

【参考方案1】:

只需实现您自己的TokenProvider 并将其提供给AccessTokenValidationMiddleware

public class MyCustomTokenProvider : IOAuthBearerAuthenticationProvider

    public Task RequestToken(OAuthRequestTokenContext context)
    
        if (context.Token == null)
        
            //try get from cookie
            var tokenCookie = context.Request.Cookies["myCookieName"];

            if (tokenCookie != null)
            
                context.Token = tokenCookie;
            
        

        return Task.FromResult(0);
    

    public Task ValidateIdentity(OAuthValidateIdentityContext context)
    
        throw new NotImplementedException();
    

    public Task ApplyChallenge(OAuthChallengeContext context)
    
        throw new NotImplementedException();
    

在你的Startup.cs:

app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions

    Authority = "http://myhost",
    RequiredScopes = new[]  "my-scope" ,
    TokenProvider = new MyCustomTokenProvider()
);

【讨论】:

感谢费德里科!我也是这么想的,但是我误解了RequestToken方法,认为它是用来从令牌端点请求新令牌的。这很有帮助!

以上是关于从自定义标头中检索访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

Laravel,如何从自定义表的 jwt 令牌获取登录用户

如何从自定义类中检索 NSArray

如何从自定义帐户中检索联系方式?

Firebase 大查询 - 如何从自定义事件表中检索数据

如何从自定义 UITableview 中检索有关选择单元格的数据

如何从自定义源的请求中获取 Cloudfront 子域?