Webapi и Azure Ad - отлично работает с устаревшей настройкой, но не при обновлении до новой настройкиC#

Место общения программистов C#
Ответить
Anonymous
 Webapi и Azure Ad - отлично работает с устаревшей настройкой, но не при обновлении до новой настройки

Сообщение Anonymous »

У меня есть существующий проект Web API, который использует Azure AD для аутентификации. < /p>
До моего присоединения к организации я понимаю, что это был проект ASP.NET 3.1, который с тех пор был обновлен до ASP.NET 6 < /p>
Аутентикация настроена на следующий код: < /p>
Создается следующим кодом: < /p>
.

Код: Выделить всё

services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
< /code>
Однако это дает предупреждения о том, что используемые методы устарели, и я пытаюсь удалить эти предупреждения. Проблема, которую у меня возникает, заключается в том, что после того, как я полагаю, что это правильные изменения, код отлично работает из пользовательского интерфейса Swagger, но клиентское программное обеспечение больше не может подключаться.// The two lines shown above are replaced with:
services.AddMicrosoftIdentityWebApiAuthentication(Configuration, "AzureAd");
< /code>
Appsettings.json:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "",
"TenantId": "",
"ClientId": "api://",   // I removed "api://", otherwise it didn't work in Swagger UI
"ClientSecret": "",
"Scope": "api:///"
}
}
< /code>
Пример клиентского кода: < /p>
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair("grant_type", "client_credentials"),
new KeyValuePair("client_id", ""),
new KeyValuePair("client_secret", ""),
new KeyValuePair("scope", "api:///.default")
});

using var httpClient = new HttpClient();
var requestResult = await httpClient.PostAsync("https://login.microsoftonline.com//oauth2/v2.0/token", content);
var resultText = await requestResult.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize(resultText);

var apiHttpClient = new HttpClient();
apiHttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.access_token);

HttpResponseMessage result = await apiHttpClient.GetAsync("https://localhost:5001/api/");
Assert.True(result.IsSuccessStatusCode); // Works with the old server code. Fails with the new code because the status code is 401
В приведенном выше коде клиент успешно получает токен, но кажется, что токен, который он получает, является недействительным для приложения, и я не понимаю, почему. К моему объявлению, но оно не оказало влияния на 401. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/722 ... ated-to-ne
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»