#asp.net-core #azure-active-directory #asp.net-identity #openid-connect
Вопрос:
Я пытаюсь разработать API, который можно вызывать из разных веб-приложений.
Если я вызываю api с клиентским конфиденциальным приложением, используя область по умолчанию (api://[APIclientId]/.по умолчанию), все работает.
Но если я укажу пользовательский идентификатор URI приложения для регистрации приложения API (например: api://myapi.iss.it) и установлю область действия api://myapi.iss.it/.по умолчанию, я получу HTTP401 из веб-приложения.
Это метод получения токена для веб-приложения для вызова api:
private async Task PrepareAuthenticatedClient()
{
IConfidentialClientApplication app;
string AURY = String.Format(CultureInfo.InvariantCulture, _config["AzureAd:Instance"] "{0}", _config["AzureAd:TenantId"]);
app = ConfidentialClientApplicationBuilder.Create(_config["AzureAd:ClientId"])
.WithClientSecret(_config["AzureAd:ClientSecret"])
.WithAuthority(new Uri(AURY))
.Build();
var accessToken = await app.AcquireTokenForClient(new string[] { _config["API:scope"] }).ExecuteAsync();
Console.WriteLine("token: " accessToken.AccessToken);
//var accessToken = await _tokenAcquisition.GetAccessTokenForAppAsync(_TodoListScope);
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken.AccessToken);
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
Я замечаю, что Аудитория по-прежнему является api://[APIclientId] в токене, даже если я установлю api:область действия api://myapi.iss.it/.по умолчанию
Это правильно? есть идеи, в чем может быть проблема?
Ответ №1:
Я получил решение на платформе вопросов и ответов Microsoft.
В принципе, я не указывал аудиторию в приложении API, поэтому по умолчанию это был «api://[APIclientId]». Когда API проверял токен приложения (где aud был api://myapi.iss.it), исключение «Microsoft.Идентификационная модель.Жетоны.Было вызвано исключение SecurityTokenInvalidAudienceException», и API вернул 401.
Если у вас такая же проблема, и вы используете Microsoft.Индентиция.Веб-библиотеки, указывающей аудиторию в файле appsetting.json, может быть достаточно.