Проблема с грантом jwt-bearer в Azure AD - PullRequest
0 голосов
/ 15 мая 2018

Итак, у меня есть приложение Angular, которое использует библиотеку adal-angular для аутентификации с помощью ASP.NET Core 2.0 Web API. Затем API использует поток от имени для проверки подлинности с помощью другого API с использованием токена пользователя, подобного этой статье MS https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-on-behalf-of.

Проблема, с которой я столкнулся, заключается в том, что она нормально работает в среде DEV, но я развернул среду TST с отдельными регистрациями приложений и получаю следующее исключение, когда пытаюсь запросить токен с использованием имени от имени * 1005. *

AADSTS240002: входной идентификатор id_token нельзя использовать как «urn: ietf: params: oauth: тип-гранта: грант-носитель».

Код, который я использую для запроса токена

public async Task<string> AcquireTokenAsync(string resource)
    {
        try
        {
            string accessToken = await _httpContextAccessor.HttpContext.GetTokenAsync(AuthenticationConstants.AccessToken);

            var credentials = new ClientCredential(_azureOptions.ClientId, _azureOptions.ClientSecret);
            var authContext = new AuthenticationContext($"{_azureOptions.Instance}{_azureOptions.TenantId}")
            {
                ExtendedLifeTimeEnabled = true
            };

            // On-behalf-of auth token request call
            var authResult = await authContext.AcquireTokenAsync(
                resource,
                credentials,
                new UserAssertion(accessToken));

            return authResult.AccessToken;
        }
        catch (AdalServiceException asex)
        {
            _logger.LogError(asex, $"Instance: {_azureOptions.Instance} Tenant: {_azureOptions.TenantId} ClientId: {_azureOptions.ClientId}");
            throw;
        }
        catch (System.Exception ex)
        {
            _logger.LogError(ex, ex.Message);
            throw;
        }
    }

И я использовал Fiddler Fiddler и похоже, что все правильные параметры передаются.

Любая помощь будет принята с благодарностью. Я установил knownClientApplications на втором API, и я предоставил разрешения на угловой серверный API для второго API.

1 Ответ

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

Согласно вашему вопросу и ошибке, это должно быть вызвано тем, что ваше угловое приложение не является родным (общедоступным) приложением .

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

Если вы хотите зарегистрировать свой клиент как WebApp / API, вы можете обратиться к этой реализации :

enter image description here

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


Обновление

Согласно комментарию ОП, он / она заставил его работать, изменив oauth2AllowImplicitFlow от false до true.

...