2015-12-26 14 views
8

Tôi cần phát trực tuyến âm thanh từ API Web của mình. Trong thuộc tính src âm thanh HTML-5 chuẩn được đặt thành URI của âm thanh từ WebAPI.Làm cách nào để xác thực yêu cầu tải xuống âm thanh HTML-5 đối với Nhận dạng Web API/Asp.Net?

Vấn đề là: Web API được bảo mật với Asp.Net Identity yêu cầu mã thông báo mang phải được chuyển trong tiêu đề, tuy nhiên HTML AUDIO TAG không cho phép chúng tôi thực hiện. Cuối cùng, tôi đã bỏ ra hai lựa chọn thay thế:

Cách tiếp cận 1. Tải xuống HTML bằng cách sử dụng yêu cầu XHR & phát cục bộ.

Phương pháp tiếp cận 2. Vượt qua các tiêu đề thông qua chuỗi truy vấn. Để chúng tôi có thể tiêm mã thông báo vào đường ống OWIN tại thời điểm trong khi xử lý yêu cầu.

Cách tiếp cận đầu tiên được đề cập ở trên không thể thực hiện được, vì nếu chúng tôi tải xuống âm thanh cục bộ, chúng tôi sẽ bỏ lỡ các tính năng phát trực tuyến do API Web cung cấp.

Bạn có thể vui lòng hỗ trợ với phương pháp tiếp cận-2 tức là ở phía API Web, chúng tôi có thể đọc mã thông báo mang từ URL & sau đó bắt đầu Xác thực danh tính Asp.Net không?

Trả lời

4

Tạo lớp nhà cung cấp này

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

Sử dụng nó trong 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() 
}); 

Bây giờ nó sẽ nhận được token từ url ".... /? Access_token = xxxxxxx" như thế và thử nó để xác nhận.

+0

Cảm ơn. Có cách nào có thể tùy chỉnh chỉ cho một hành động. Trong cách tiếp cận của bạn Việc thay đổi nhà cung cấp thành 'QueryStringOAuthBearerProvider' sẽ buộc chúng tôi chuyển người mang mã thông báo cho các Apis khác cũng như trong URL. – Abhijeet

+0

Bạn có thể chia api của bạn thành hai mảnh một trong số họ sử dụng phương pháp này chỉ cho một hành động, cách tiếp cận sử dụng cổ điển khác. –

Các vấn đề liên quan