我需要从我的Web API流式传输音频。在标准HTML-5中,音频src属性被设置为来自WebAPI的音频的URI。
问题是:使用Asp.Net Identity保护的Web API需要在头中传递承载令牌,但HTML AUDIO TAG不允许我们这样做。我最终被排除在外,有两个替代方案:
方法1。使用XHR请求下载HTML&在当地比赛。
方法2。通过查询字符串传递标头。这样我们就可以注射在请求处理期间的某个时间点,令牌进入OWIN管道。
上面提到的第一种方法是不可行的,因为如果我们在本地下载音频,我们将错过Web API提供的流功能。
请您协助方法-2,即在Web API方面,我们可以从URL&然后启动Asp.Net身份验证?
创建此提供程序类
public class QueryStringOAuthBearerProvider : OAuthBearerAuthenticationProvider
{
public override Task RequestToken(OAuthRequestTokenContext context)
{
var value = context.Request.Query.Get("access_token");
if (!string.IsNullOrEmpty(value))
{
context.Token = value;
}
return Task.FromResult<object>(null);
}
}
在Startup.cs中使用
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
// In production mode set AllowInsecureHttp = false
AllowInsecureHttp = true
};
// Enable the application to use bearer tokens to authenticate users
//app.UseOAuthBearerTokens(OAuthOptions); // old line
app.UseOAuthAuthorizationServer(OAuthOptions); // new line
// Enable the application to retrieve tokens from query string to authenticate users
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
Provider = new QueryStringOAuthBearerProvider()
});
现在,它将从类似的url"…./?access_token=xxxxxxx"中获取令牌,并尝试对其进行验证。