Токен Aquire с ADAL.Net выдает неизвестный тип пользователя для управляемой учетной записи AD - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь вызвать веб-службу (api) с помощью токена OAuth2, основанного на учетной записи управляемого пользователя AAD, вошедшей в систему на присоединенном компьютере AAD с использованием ADAL.Net, в частности, в следующем примере: https://github.com/AzureAD/azure-activedirectory-library-for-dotnet/wiki/AcquireTokenSilentAsync-using-Integrated-authentication-on-Windows-(Kerberos)

Однако я получаю исключение: Неизвестный тип пользователя

В моей настройке я вошел на компьютер в частной сети AAD с синхронизированной учетной записью AAD. Затем я запускаю пример кода с помощью WindowsAuthentication.

После некоторой отладки я могу сузить исключение для этого метода в ADAL.Net

protected internal /* internal for test only */ override async Task PreTokenRequestAsync()
    {
        await base.PreTokenRequestAsync().ConfigureAwait(false);

        if (!SupportADFS)
        {
            var userRealmResponse = await _commonNonInteractiveHandler.QueryUserRealmDataAsync(Authenticator.UserRealmUriPrefix)
               .ConfigureAwait(false);

            if (string.Equals(userRealmResponse.AccountType, "federated", StringComparison.OrdinalIgnoreCase))
            {
                WsTrustResponse wsTrustResponse = await _commonNonInteractiveHandler.PerformWsTrustMexExchangeAsync(
                    userRealmResponse.FederationMetadataUrl,
                    userRealmResponse.CloudAudienceUrn,
                    UserAuthType.IntegratedAuth).ConfigureAwait(false);

                // We assume that if the response token type is not SAML 1.1, it is SAML 2
                _userAssertion = new UserAssertion(wsTrustResponse.Token, (wsTrustResponse.TokenType == WsTrustResponse.Saml1Assertion) ? OAuthGrantType.Saml11Bearer : OAuthGrantType.Saml20Bearer);
            }
            else
            {
                throw new AdalException(AdalError.UnknownUserType);
            }
        }
    }

Поскольку все в моей настройке управляется с помощью AAD, я не понимаю, почему тип учетной записи пользователя должен быть «объединен» для получения токена.

Так что я подозреваю, что мне нужно получить свой токен другим способом !? Любая помощь будет оценена;)

1 Ответ

0 голосов
/ 07 ноября 2018

После исследования мы обнаружили, что вышеуказанный код (ADAL.Net) может использоваться только с федеративной установкой.

Федерация означает, что у вас есть локальная сеть, в которой хранятся ваши учетные записи пользователей Windows, подключенные к сети Azure AD, которая затем «объединяет» эти учетные записи в Azure AD. Однако было бы хорошо, если бы член команды ADAL прокомментировал это.

Получение токена для учетной записи пользователя Windows в чистом Azure AD (управляемая настройка) можно предположить с помощью этого кода:

var connString = $"RunAs=App;AppId={appId};TenantId={tenantId};AppKey={appKey};";
var azureServiceTokenProvider = new AzureServiceTokenProvider(connString2);
var accessToken = azureServiceTokenProvider.GetAccessTokenAsync(service, tenantId).Result;

, который описан здесь: https://docs.microsoft.com/en-us/azure/key-vault/service-to-service-authentication#running-the-application-using-managed-identity

Опять же, это не так хорошо задокументировано, поэтому любая ясность от Microsoft будет хорошей.

...