Крючки для проверки претензий Azure функционирует? - PullRequest
0 голосов
/ 09 мая 2018

Допустим, у меня есть две функции Azure:

public static class MyFunctions
    [FunctionName("DoIt")]
    public static async Task<HttpResponseMessage> DoIt(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequestMessage req,
        TraceWriter log)
    {}

    [FunctionName("DoSOmethingElse")]
    public static async Task<HttpResponseMessage> DoOther(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequestMessage req,
        TraceWriter log)
    {}
}

А затем я настраиваю функцию AppService, чтобы она требовала аутентификацию AzureAD. Допустим, я хотел получить определенные разрешения, такие как членство в роли или другие претензии. Я мог бы сделать следующее в функции, которую я вызываю в верхней части каждого метода:

  • проверить параметр req для токена на предъявителя, проанализировать JWT
  • посмотрите на претензии
  • Используйте AuthenticationContext или другую библиотеку JWT для получения токенов Microsoft Graph для получения дополнительных данных

У меня вопрос, есть ли варианты сделать что-либо из следующего?

  • Создайте функцию «перед подключением», чтобы каждая функция http, которую я пишу в этом классе или развернул в сервисном контейнере, проходила эту проверку
  • Выполнить какие-либо из этих авторизаций через атрибуты?
  • Доступ к идентификатору претензий напрямую?

1 Ответ

0 голосов
/ 10 мая 2018

Я нашел пример кода, связанный с тем, что вы ищете:

Итак, интересная часть здесь (даст вам основную идею):

[FunctionName("GetClaims")]
public static HttpResponseMessage GetClaims(
  [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]
  HttpRequestMessage request,
  TraceWriter log)
{
  if (Thread.CurrentPrincipal.Identity.IsAuthenticated)
    {
      var claimsPrincipal = (ClaimsPrincipal)Thread.CurrentPrincipal;
      var claims = claimsPrincipal.Claims.ToDictionary(c => c.Type, c => c.Value);
      // Could use the claims here. For this sample, just return it!
      return request.CreateResponse(HttpStatusCode.OK, claims, "application/json");
      }
      else
      {
        return request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Not Authorized");
      }
    }

Упрощенным решением было бы создание функции, которая получает заявки, и вы можете вызывать эту функцию в любых других функциях.

Функции Azure имеют Фильтры функций (согласно документации он все еще находится в предварительном просмотре.)

Фильтры функций предоставляют возможность настроить конвейер выполнения WebJobs с вашей собственной логикой. Фильтры очень похожи на фильтры ASP.NET. Они могут быть реализованы как декларативные атрибуты, которые могут применяться к вашим рабочим функциям / классам.

Фильтры позволяют инкапсулировать общую логику, которая будет совместно использоваться многими различными функциями. Они также позволяют централизовать логику для сквозных задач (например, проверка, ведение журнала, обработка ошибок и т. Д.).

Таким образом, вы сможете создать собственный фильтр авторизации с этой информацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...