Сигурно извикване на WebSite хостван Web API от Azure WebJob

Имам непрекъснато планирано уеб задание, което наблюдава опашка от съобщения, изтегля съобщения и извиква уеб API на партньорския уеб сайт за обработка на съобщенията (в този случай използвайки SignalR за изпращане на известия до подходящи потребители).

Какъв би бил най-добрият начин в този случай за безопасно извикване на уеб API? API, хостван в уеб сайта, очевидно е изложен по друг начин. Може би нещо, което използва Basic Auth или съхранява токен за сигурност в конфигурацията и го предава от заданието към уеб API. Или създаване на персонализиран AuthorizeAttribute?

Мислите на Ant относно осигуряването на извикването на Web API от WebJob ще бъдат много оценени. API трябва да може да се извиква само от WebJob.

АКТУАЛИЗАЦИЯ: Може би нещо подобно?

Първо декларирам този клас;

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

Тогава повикващият (WebJob) използва този клас, за да зададе заглавка за удостоверяване, когато прави 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"); 
    // ....

В уеб API проверяваме заявката, търсейки очаквания токен в заглавката за удостоверяване, в момента кодът е доста грозен, но това може да бъде поставено в персонализиран атрибут;

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.

Така че по този начин WebJob извиква Web API на партньорския уеб сайт и сигурността се постига чрез предаване на токен, който се съхранява сигурно в конфигурацията на Azure, както сайтът, така и работата имат достъп до този токен.

Някакви по-добри идеи?


person Stuart Hallows    schedule 06.05.2014    source източник
comment
Намерихте ли по-добро решение?   -  person Ricardo Polo Jaramillo    schedule 19.05.2014


Отговори (1)


Звучи, че основното удостоверяване би било добре за вашия сценарий.

Страхотен урок тук: Основно удостоверяване

person Brendan Green    schedule 06.05.2014