简而言之:我需要将OWIN承载令牌作为查询参数传递和验证,而不是在请求标头中。
然后,如何根据该令牌字符串将该方法设置为authorized?
背景:我想调用一个webapi方法来以流的形式下载文件(并且永远不希望用户从一个已知的文件位置下载它)。
如果我还需要设置一个自定义的请求头,也就是持有者令牌,我就不能让它工作。
我应该能够在查询字符串中传递令牌--但是不知道如何获得令牌来验证用户。
我需要过滤吗?我是否需要特殊索赔等?webapi方法是否需要将"access_token“作为函数参数之一?
发布于 2014-02-21 16:16:32
发布于 2014-08-27 19:02:33
为了完整性,here's提供了另一个简洁的解决方案。
摘录:
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();
});
发布于 2016-10-31 21:09:26
或者像这样做
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);
}
}
});
https://stackoverflow.com/questions/21925367
复制相似问题