如何根据Web API/Asp.Net标识验证HTML-5音频下载请求



我需要从我的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"中获取令牌,并尝试对其进行验证。

最新更新