【发布时间】:2015-09-17 18:06:04
【问题描述】:
为了下载文件,我需要使用 GET: /API/File/ID?bearerToken=XYZ... 方法。
我创建了一个 DelegatingHandler 来将我的令牌添加到 AuthorizationHeader,但似乎令牌验证可能在此之前完成...
Angular 添加的当前所有令牌,将令牌添加到请求之前的 HTTP 标头中。
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
ConfigureOAuth(app);
WebApiConfig.Register(config);
GlobalFilters.Add(config);
app.UseWebApi(config);
config.MessageHandlers.Insert(0, new QueryStringBearerToken());
}
..
public class QueryStringBearerToken : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
var bearerToken = request.GetQueryNameValuePairs().
Where(kvp => kvp.Key == "bearertoken")
.Select(kvp => kvp.Value)
.FirstOrDefault();
//QueryString exists and Header doesn't
if (!string.IsNullOrWhiteSpace(bearerToken) && !request.Headers.Any(x=>x.Key == "Authorization"))
{
request.Headers.Add("Authorization", "Bearer " + bearerToken);
}
return base.SendAsync(request, cancellationToken);
}
}
【问题讨论】:
标签: asp.net angularjs asp.net-web-api oauth bearer-token