如何根据 Web API / Asp.Net 身份验证 HTML-5 音频下载请求?
How to authenticate HTML-5 Audio download request against Web API / Asp.Net Identity?
我需要从我的 Web API 流式传输音频。在标准 HTML-5 中,音频 src 属性设置为来自 WebAPI.
的音频的 URI
问题是:使用 Asp.Net 身份保护的 Web API 需要在 headers 中传递不记名令牌,但是 HTML AUDIO TAG 不允许我们做。我终于排除了两个选择:
Approach 1. Download the HTML using XHR request & play locally.
Approach 2. Pass headers via query string. So that we could inject the
token into OWIN pipeline at point of time during request processing.
上面提到的第一种方法不可行,因为如果我们在本地下载音频,我们会错过 Web 提供的流媒体功能 API。
您能否协助方法 2,即在 Web API 端我们可以从 URL 读取持有者令牌,然后启动 Asp.Net 身份验证?
创建此提供程序class
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" 获取令牌并尝试验证。
我需要从我的 Web API 流式传输音频。在标准 HTML-5 中,音频 src 属性设置为来自 WebAPI.
的音频的 URI问题是:使用 Asp.Net 身份保护的 Web API 需要在 headers 中传递不记名令牌,但是 HTML AUDIO TAG 不允许我们做。我终于排除了两个选择:
Approach 1. Download the HTML using XHR request & play locally.
Approach 2. Pass headers via query string. So that we could inject the token into OWIN pipeline at point of time during request processing.
上面提到的第一种方法不可行,因为如果我们在本地下载音频,我们会错过 Web 提供的流媒体功能 API。
您能否协助方法 2,即在 Web API 端我们可以从 URL 读取持有者令牌,然后启动 Asp.Net 身份验证?
创建此提供程序class
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" 获取令牌并尝试验证。