2014-05-06 19 views
6

Mam stale zaplanowane zadanie sieciowe, które monitoruje kolejkę komunikatów, wyłącza komunikaty i wywołuje interfejs Web API w witrynie sieci Web w celu przetworzenia wiadomości (w tym przypadku przy użyciu SignalR wysyłać powiadomienia do odpowiednich użytkowników).Bezpieczne wywoływanie hostowanego WebSite Web API z usługi Azure WebJob

Jaki byłby najlepszy sposób połączenia się z interfejsem API WWW w bezpieczny sposób? Interfejs API hostowany na stronie internetowej jest oczywiście inaczej ujawniony. Być może coś za pomocą Basic Auth lub przechowywanie tokena bezpieczeństwa w config i przekazywanie go z zadania do web API. Lub tworzenie niestandardowego AuthorizeAttribute?

Mrówki na temat zabezpieczenia wywołania Web API z WebJob byłyby mile widziane. Interfejs API powinien być dostępny tylko z WebJob.

AKTUALIZACJA: Może coś takiego?

Najpierw deklaruję tę klasę;

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

Następnie osoba wywołująca (WebJob) używa tej klasy do ustawienia nagłówka auth podczas tworzenia żądania 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"); 
    // .... 

Over w API Web sprawdzamy prośbę szuka oczekiwanego tokenu w nagłówku auth, obecnie kod jest dość brzydki, ale to może być wprowadzone do atrybutu niestandardowego;

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. 

Więc ten sposób WebJob wywołuje API internetowy na stronie internetowej rówieśniczej i bezpieczeństwa uzyskuje się poprzez przepuszczenie tokena, który jest pewnie trzymany w Azure konfiguracji, zarówno strony i praca mają dostęp do tego tokena.

Jakieś lepsze pomysły?

+0

Czy znalazłeś lepsze rozwiązanie? –

+0

Niestety nie. –

Odpowiedz

1

Wygląda na to, że podstawowe uwierzytelnienie byłoby w porządku dla danego scenariusza.

Świetny tutorial tutaj: Basic Authentication

Powiązane problemy