После дополнительного поиска я обнаружил, что у меня возникли две проблемы: веб-сайт не настроен на прием Azure AD токенов, и что-то заставляет мой код HttpClient не запрашивать нужную информацию.
Чтобы настроить сайт для приема Azure AD токенов, я изменил свой файл startup.cs, так что теперь в разделе services.AddAuthentication
читается:
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options))
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
Это позволяет использовать только один метод проверки подлинности по умолчанию работать так, что либо пользовательский вход работает, либо канал-носитель работает в зависимости от того, на что установлен AzureADDefaults
. Вы можете указать, какой из них использовать, что я и сделал в своем API, украсив класс:
[Authorize(AuthenticationSchemes = AzureADDefaults.BearerAuthenticationScheme)]
Это сломано в ASP. net 2.2, но должно работать в 3.0 (из чего Я читаю). Чтобы обойти это, измените его на:
[Authorize(AuthenticationSchemes = "AzureADBearer")]
Если вы хотите разрешить токен на предъявителя и обычные имена входа, добавьте AzureAD
в строку:
[Authorize(AuthenticationSchemes = "AzureADBearer, AzureAD")]
Что касается HttpClient проблема, я не уверен, что не так, но я также переключился на код Microsoft и использовал ConfidentialClientApplication
для создания запроса и получения токена, и он работает сейчас, вместе с startup.cs
изменениями.