Как получить информацию о пользователе в функции Azure, аутентифицированную в Azure AD - PullRequest
0 голосов
/ 11 января 2019

У меня есть угловое приложение и приложение функций Azure. Оба приложения проходят проверку подлинности Azure AD. Хотя после ввода правильных учетных данных я вызываю функцию приложения Functions, она работает нормально. Приложение Angular добавляет токен к вызову и используется для проверки подлинности функции Azure. Тем не менее, в функции Azure, основанной на пользователях, мне нужно поместить некоторую логику, но я не смог найти, как получить информацию о пользователе, который вызвал функцию. Я пытался получить ClaimsPrincipal, чтобы получить информацию о пользователе, но он не дает мне информацию о пользователе, которого я ожидал, а возвращает информацию администратора.

Спасибо.

1 Ответ

0 голосов
/ 22 января 2019

Можно использовать привязку Microsoft Graph, в частности привязку Auth .

Просто убедитесь, что для свойства identity установлено значение userFromRequest, а затем вызовите один из API Microsoft Graph , как показано в документе.

Для справки, вот пример из документа

function.json

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "token",
      "direction": "in",
      "name": "graphToken",
      "resource": "https://graph.microsoft.com",
      "identity": "userFromRequest"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

C # Script

using System.Net; 
using System.Net.Http; 
using System.Net.Http.Headers;
using Microsoft.Extensions.Logging; 

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, string graphToken, ILogger log)
{
    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", graphToken);
    return await client.GetAsync("https://graph.microsoft.com/v1.0/me/");
}

NodeJS / JavaScript

const rp = require('request-promise');

module.exports = function (context, req) {
    let token = "Bearer " + context.bindings.graphToken;

    let options = {
        uri: 'https://graph.microsoft.com/v1.0/me/',
        headers: {
            'Authorization': token
        }
    };

    rp(options)
        .then(function(profile) {
            context.res = {
                body: profile
            };
            context.done();
        })
        .catch(function(err) {
            context.res = {
                status: 500,
                body: err
            };
            context.done();
        });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...