2015-12-26 8 views
8

は、私は私のウェブAPIからオーディオをストリーミングする必要があります。標準のHTML-5では、srcAPIからのオーディオsrc属性は、URIのURIに設定されています。Web API/Asp.Net Identityに対するHTML-5オーディオダウンロード要求を認証する方法?

問題がある:Asp.Netアイデンティティで保護されたWeb APIは、ベアラトークンがヘッダーで渡される必要があり、しかし、HTML AUDIOタグは、私たちが行うことはできません。ローカルXHRリクエスト&プレイを使用してHTMLをダウンロード

アプローチ1:私は、最終的には二つの選択肢を除外しています。クエリ文字列を経由して

アプローチ2.パスヘッダ。我々は、要求の処理中に時間の時点でOWINパイプラインに トークンを注入することができるように。

私たちがオーディオをローカルにダウンロードすると、Web APIによって提供されるストリーミング機能が欠落する可能性があるため、上記のアプローチは実行できません。

アプローチ2で支援してください。つまり、Web API側でURL &からのベアラトークンを読み取り、Asp.Net ID認証を開始できるようにしてください。

答えて

4

今では ".... /?access_tokenは= XXXXXXX" のURLからトークンを取得します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() 
}); 

を、それを使用し

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); 
    } 
} 

このプロバイダクラスを作成します。それを検証して検証してください。

+0

感謝。 1つのアクションに対してのみカスタマイズできる方法はありますか?あなたのアプローチでは、プロバイダーを 'QueryStringOAuthBearerProvider'に変更することで、URL内の他のApisのトークンでベアラーを渡すように強制します。 – Abhijeet

+0

あなただけのワンアクション、他の使用の古典的なアプローチのために、このアプローチを使用してそれらのいずれか二つにあなたのAPIを分割することができます。 –

関連する問題