Вызов Azure AD защищен Azure Функция из консольного приложения / PowerShell с делегированным разрешением - PullRequest
0 голосов
/ 09 мая 2020

Я хочу, чтобы пользователь вошел в командную строку AAD на своих Windows настольных компьютерах, чтобы получить токен-носитель, который будет работать с моей функцией Azure.

I ' я следовал руководству из этой статьи по adatum , но он охватывает только разрешения приложения (а не делегированные разрешения)

  • У меня уже есть функция Azure, настроенная для Azure Аутентификация AD.
  • У меня уже есть клиентское приложение, которое я зарегистрировал (в разделе «Регистрация приложений»).
    • Я настроил его для использования делегированных разрешений для функции Azure.

Вот мой клиентский код:

var clientId = "client id for my console app";//console app
var clientUrl = new Uri("https://login.microsoftonline.com/common/oauth2/nativeclient");  
var tenant = "tenantid here";
string authority = "https://login.windows.net/" + tenant;

string resource = "https://myaadProtectedFunc.azurewebsites.net";  

AuthenticationContext authenticationContext = new AuthenticationContext(authority, false);

var pp = new PlatformParameters(PromptBehavior.Auto);
var token = authenticationContext.AcquireTokenAsync(resource, clientId, clientUrl, 
    pp, UserIdentifier.AnyUser).Result;
Console.WriteLine("Got the token: {0}", token.AccessToken);

Я получаю сообщение об ошибке: «[моему клиентскому приложению] требуется разрешение на доступ к ресурсам в вашей организации, которое может предоставить только администратор. Попросите администратора предоставить разрешение этому приложению, прежде чем вы сможете его использовать».

Есть ли другой способ получить токен на предъявителя, который будет работать с моей функцией Azure?

Ответы [ 2 ]

1 голос
/ 10 мая 2020

Я провел тест, и ваш код работает, если вы правильно настроили сторону azure. скорее всего в функции azure она у вас не настроена правильно.

в функции azure вы настроили принципала службы? например. приложение-функция -> функции платформы -> аутентификация / авторизация -> Аутентификация службы приложений в положение ВКЛ -> выберите azure активный каталог -> express -> создать. -> нажмите ок. -> сохранить.

тогда при регистрации приложения вы увидите 2. регистр приложения для вашего клиента и регистр приложения для вашего приложения-функции. в приложении reg для вашего клиента go с разрешениями api и добавьте регистрацию приложения для своего приложения-функции с выбранным олицетворением пользователя.

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

Надеюсь, что это поможет.

0 голосов
/ 11 мая 2020

Хорошо, оказывается, мне вообще не нужно делать отдельное клиентское приложение.

Я могу просто использовать идентификатор клиента функции Azure.

Дело в том, что вам нужно go на «Продвинуть» вместо «Express», потому что библиотека Microsoft.Identity.Client использует токены v2.0.

Это необходимо для настройки вашей Azure функции - оставьте все поля одинаковыми, но добавьте /v2.0 в URL-адрес эмитента: Choose Advanced

Это код для получения токена делегированного носителя для функции Azure, которая использует токен v2.0 - я не знаю, как изменить его, чтобы использовать токен v1:

string[] scopes = new string[] { "profile", "email", "openid" };
string ClientId = [clientId of Azure Function];
string Tenant = [tenantId];
string Instance = "https://login.microsoftonline.com/";
var _clientApp = PublicClientApplicationBuilder.Create(ClientId)
    .WithAuthority($"{Instance}{Tenant}")
    .WithDefaultRedirectUri()
    .Build();
var accounts = _clientApp.GetAccountsAsync().Result;

var authResult = _clientApp.AcquireTokenInteractive(scopes)
            .WithAccount(accounts.FirstOrDefault())
            .WithPrompt(Prompt.SelectAccount)
            .ExecuteAsync().Result;
var bearerTokenForAzureFunction = authResult.IdToken;

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

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