Abh*_*eet 9 html5 html5-audio asp.net-web-api owin asp.net-identity
我需要从我的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);
}
}
Run Code Online (Sandbox Code Playgroud)
在 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()
});
Run Code Online (Sandbox Code Playgroud)
现在它将从 url“..../?access_token=xxxxxxx”获取令牌,并尝试进行验证。
| 归档时间: |
|
| 查看次数: |
585 次 |
| 最近记录: |