首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在WebAPI中传递和验证查询字符串中的OWIN持有者令牌

在WebAPI中传递和验证查询字符串中的OWIN持有者令牌
EN

Stack Overflow用户
提问于 2014-02-21 12:34:44
回答 3查看 13.8K关注 0票数 18

简而言之:我需要将OWIN承载令牌作为查询参数传递和验证,而不是在请求标头中。

然后,如何根据该令牌字符串将该方法设置为authorized?

背景:我想调用一个webapi方法来以流的形式下载文件(并且永远不希望用户从一个已知的文件位置下载它)。

如果我还需要设置一个自定义的请求头,也就是持有者令牌,我就不能让它工作。

我应该能够在查询字符串中传递令牌--但是不知道如何获得令牌来验证用户。

我需要过滤吗?我是否需要特殊索赔等?webapi方法是否需要将"access_token“作为函数参数之一?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-21 16:16:32

票数 9
EN

Stack Overflow用户

发布于 2014-08-27 19:02:33

为了完整性,here's提供了另一个简洁的解决方案。

摘录:

代码语言:javascript
代码运行次数:0
运行
复制
app.Use(async (context, next) =>
{
    if (context.Request.QueryString.HasValue)
    {
        if (string.IsNullOrWhiteSpace(context.Request.Headers.Get("Authorization")))
        {
            var queryString = HttpUtility.ParseQueryString(context.Request.QueryString.Value);
            string token = queryString.Get("access_token");

            if (!string.IsNullOrWhiteSpace(token))
            {
                context.Request.Headers.Add("Authorization", new[] { string.Format("Bearer {0}", token) });
            }
        }
    }

    await next.Invoke();
});
票数 29
EN

Stack Overflow用户

发布于 2016-10-31 21:09:26

或者像这样做

代码语言:javascript
代码运行次数:0
运行
复制
    app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
    {
        Authority = IdentityConfig.Authority,
        RequiredScopes = new[] { "api" },
        TokenProvider = new OAuthBearerAuthenticationProvider
        {
            OnRequestToken = ctx =>
            {
                if (String.IsNullOrWhiteSpace(ctx.Token) && ctx.Request.QueryString.HasValue)
                {
                    NameValueCollection parsedQuery = HttpUtility.ParseQueryString(ctx.Request.QueryString.Value);
                    ctx.Token = parsedQuery["access_token"];
                }

                return Task.FromResult(0);
            }
        }
    });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21925367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档