Аутентифицировать функцию Azure по токену с помощью ресурса - PullRequest
0 голосов
/ 28 мая 2018

У меня есть функция Azure с включенной авторизацией / аутентификацией через вход AD.

Я пытаюсь аутентифицироваться, генерируя токен с помощью client_credentials:

См. Следующий код ниже:

        var tokenendpoint = "https://login.microsoftonline.com/172f05a2-f956-4856-b4c8-9580a54dbd56/oauth2/token";

        string clientID = "eaeff78a-26ef-4bcb-b977-638316ff15b7";
        string clientSecret = "HvVlipQkpuezmD4YiUcWVpZ5Cn1cP3vxiW61pSpDo8k=";
        string resource = "eaeff78a-26ef-4bcb-b977-638316ff15b7"; //ClientID
        string grantType = "client_credentials";

        using (var reqToken = new WebClient())
        {
            NameValueCollection parameters = new NameValueCollection();
            parameters.Add("client_id", clientID);
            parameters.Add("client_secret", clientSecret);
            parameters.Add("resource", resource);
            parameters.Add("grant_type", grantType);

            var responseTokenBytes = reqToken.UploadValues(tokenendpoint, "POST", parameters);
            string responseTokenContent = Encoding.UTF8.GetString(responseTokenBytes).Replace(@"\", "");

            azureFunctionTokenResponse = responseTokenContent.Deserialize<AzureFunctionTokenResponseBase>();
            AzureFunctionToken = azureFunctionTokenResponse.access_token;
        }

Все работает нормально, если я установил ресурс в качестве ClientID своей функции.Однако во многих примерах в режиме онлайн для ресурса задано значение URI функции Azure.

Если я установлю для своего ресурса значение https://www.xxxxxx.azurewebsites.com, то получу ошибку 401.

Почему это?

Я потратил целый день на то, чтобы это наконец заработало, но нигде в документации не сказано, чтобы ввести ClientID в качестве ресурса ??

1 Ответ

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

Если вы используете одно и то же приложение AAD для включения авторизации / аутентификации для вашей функции Azure и вашего клиентского кода для получения access_token для доступа к вашей функции Azure, вы можете указать resource для ИД приложения (ClientID) или URI идентификатора приложения вашего приложения AAD.

Как правило, мы будем использовать ClientID в качестве resource, и авторизация / аутентификация службы приложений будет сравнивать идентификатор клиентавы настроили в Аутентификация / Авторизация> Настройки Azure Active Directory со свойством aud входящего токена-носителя JWT, вы можете использовать https://jwt.io/ для декодирования вашего токена.

Однако во многих примерах в Интернете для ресурса задано значение URI функции Azure.

Если я установлю свой ресурс на https://www.xxxxxx.azurewebsites.com, то получу ошибку 401.

Я предполагаю, что эти образцы могут использовать URI идентификатора приложения , вы можете установить URI идентификатора приложения на https://www.xxxxxx.azurewebsites.com для своего приложения AAD (Настройки> Свойства> App ID URI), тогда вы можете использовать App ID URI для параметра ресурса.

Примечание: Для этого подхода вам может потребоваться настроить параметры Azure Active Directoryдля своей функции Azure вы можете сохранить идентификатор клиента в идентификаторе приложения вашего приложения AAD и добавить URI идентификатора приложения в список разрешенных токенов или просто заменить его своим приложением.ID URI.

Кроме того, вы можете ADAL библиотека для получения токена.Кроме того, если вы создадите каждое приложение AAD для своей функции Azure и вашего клиентского приложения, вы можете выполнить эту проблему .

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