Итак, у меня есть приложение 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 и похоже, что все правильные параметры передаются.
Любая помощь будет принята с благодарностью. Я установил knownClientApplications на втором API, и я предоставил разрешения на угловой серверный API для второго API.