Можно ли добавить несколько аудиторий в токен AzureAdBearer? - PullRequest
0 голосов
/ 21 марта 2019

У меня есть приложение, которое использует MSAL для получения токена доступа из Azure AD.Это делается на стороне клиента, которая имеет собственный реестр приложений Azure.Затем я передаю этот токен доступа на сервер, который затем вызывает Microsoft Graph для получения другой информации от имени пользователя.Тем не менее, я получаю аудиторию не соответствует провалу, когда я делаю вызов графа.Это кажется подходящим, но теперь я не уверен, как добавить идентификатор аудитории веб-сервера в токен.

Во-первых, это правильный рабочий процесс для этого типа сценария?Я использую MSAL для аутентификации пользователя, затем использую веб-сервис для вызова графа для получения дополнительной информации.Во-вторых, возможно ли добавить несколько аудиторий к токену доступа при использовании AzureADBearer?Я знаю, что это возможно с JWTBearer.

//web service
services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;

        });

        services.AddAuthentication(sharedOptions =>
        {
            sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;

        })
        .AddAzureAdBearer(options =>
        {
            Configuration.Bind("AzureAd", options);

        })
        .AddCookie(options => options.Cookie.SameSite = SameSiteMode.None);

1 Ответ

1 голос
/ 22 марта 2019

Концепция

То, как вы описываете свой поток, похоже, что вы используете токен, поступающий от клиента к веб-сервису напрямую для вызова Microsoft Graph API от имени пользователя.это было бы неправильно от имени потока.

Как только вы аутентифицировали клиента в веб-сервисе на основе входящего токена, веб-сервис должен получить новый токен специально для графа Microsoft от имени пользователя (используя первый токен).

Более подробное описание потока см. Здесь Поток Azure Active Directory v2.0 и OAuth 2.0 «от имени»

Пример кода

Взгляните на этот пример кода.Это очень близко к тому, что вы пытаетесь достичь.

Здесь приложение WPF сначала вызывает ASP.NET Core Web API, а API позже вызывает Microsoft Graph от имени пользователя.

ASP.NET Core 2.1 Web API вызывает Microsoft Graph, сам вызывается из приложения WPF с использованием Azure AD V2

Важные части, на которые следует обратить внимание из кода:

Посмотрите на TodoListController.cs, где API сначала получаетновый AccessToken от имени пользователя, передавая необходимые области, а затем использует этот новый токен для вызова Microsoft Graph API.

 public async Task<string> CallGraphApiOnBehalfOfUser()
 {
    string[] scopes = { "user.read" };

    // we use MSAL.NET to get a token to call the API On Behalf Of the current user
    try
    {
        string accessToken = await _tokenAcquisition.GetAccessTokenOnBehalfOfUser(HttpContext, scopes);
        dynamic me = await CallGraphApiOnBehalfOfUser(accessToken);
        return me.userPrincipalName;
    }
...