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?
Czy znalazłeś lepsze rozwiązanie? –
Niestety nie. –