2014-05-06 27 views
6

Tôi có một công việc web được lập lịch liên tục theo dõi hàng đợi thư, kéo thư và gọi API Web trên trang Web ngang hàng để xử lý thư (trong trường hợp này là sử dụng SignalR để gửi thông báo cho người dùng thích hợp).Gọi điện một cách an toàn WebSite Web API được lưu trữ từ Azure WebJob

Cách tốt nhất để gọi API web là gì? API được lưu trữ trên trang web rõ ràng là được hiển thị theo cách khác. Có lẽ một cái gì đó bằng cách sử dụng Basic Auth hoặc lưu trữ một mã thông báo bảo mật trong cấu hình và chuyển nó từ công việc đến API web. Hoặc tạo một AuthorizeAttribute tùy chỉnh?

Suy nghĩ kiến ​​về đảm bảo cuộc gọi API Web từ WebJob sẽ được nhiều người đánh giá cao. API chỉ nên được gọi từ WebJob.

CẬP NHẬT: Điều gì đó giống như vậy?

Trước tiên, tôi khai báo lớp này;

public class TokenAuthenticationHeaderValue : AuthenticationHeaderValue 
{ 
    public TokenAuthenticationHeaderValue(string token) 
     : base("Token", Convert.ToBase64String(Encoding.UTF8.GetBytes(token))) 
    { } 
} 

Sau đó, người gọi (WebJob) sử dụng lớp này để đặt tiêu đề xác thực khi thực hiện yêu cầu HTTP;

using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri(/* something */); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
    client.DefaultRequestHeaders.Authorization = new TokenAuthenticationHeaderValue("TOKEN FROM CONFIG"); 
    // .... 

Trong API Web, chúng tôi kiểm tra yêu cầu tìm mã thông báo dự kiến ​​trong tiêu đề xác thực, mã hiện tại khá xấu nhưng có thể được đưa vào thuộc tính tùy chỉnh;

public HttpResponseMessage Post([FromBody]TheThing message) 
{ 
    var authenticationHeader = Request.Headers.Authorization; 
    var token = Encoding.UTF8.GetString(Convert.FromBase64String(authenticationHeader.Parameter)); 
    if (authenticationHeader.Scheme != "Token" || token != "TOKEN FROM CONFIG") 
    { 
     return Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "No, no, no. That's naughty!"); 
    } 
    // All OK, carry on. 

Vì vậy, cách này WebJob gọi API Web trên trang web đồng đẳng và an ninh được thực hiện bằng cách thông qua một mã thông báo được một cách an toàn được tổ chức trong cấu hình Azure, cả hai trang web và công việc có quyền truy cập vào mã thông báo này.

Bất kỳ ý tưởng nào tốt hơn?

+0

Bạn có tìm giải pháp tốt hơn không? –

+0

Thật không may là không. –

Trả lời

1

Âm thanh như Xác thực cơ bản sẽ ổn cho kịch bản của bạn.

Hướng dẫn tuyệt vời tại đây: Basic Authentication

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