Веб-API ASP.NET Core 8: аутентификация с помощью AADC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Веб-API ASP.NET Core 8: аутентификация с помощью AAD

Сообщение Anonymous »

Я воссоздаю те же веб-API .NET 6/.NET 7 в .NET 8. У меня возникла проблема с аутентификацией с использованием Swagger, связанного с Azure Active Directory. Я только что скопировал старый код в новый проект в .NET 8, и поведение изменилось.
В Program.cs я добавил этот код для чтения конфигурации Azure. из файла appsettings.json:

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

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(options =>
{
builder.Configuration.Bind("AzureAd", options);
options.TokenValidationParameters.NameClaimType = "name";
},
options => { builder.Configuration.Bind("AzureAd", options); });

builder.Services.Configure(
OpenIdConnectDefaults.AuthenticationScheme,
options =>
{
options.TokenValidationParameters.ValidateLifetime = true;
options.TokenValidationParameters.ClockSkew = TimeSpan.Zero;
});
И затем в конфигурации Swagger у меня есть

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

builder.Services.AddSwaggerGen(options =>
{
options.CustomSchemaIds(type => type.FullName);
options.DescribeAllParametersInCamelCase();
options.CustomSchemaIds(type => type.FullName);

var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
options.IncludeXmlComments(xmlPath);
options.OperationFilter();

var scope = configuration.GetValue("AzureAd:Scopes");

options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
{
Type = SecuritySchemeType.OAuth2,
Description = "The api is protected against Azure AD",
Flows = new OpenApiOAuthFlows
{
Implicit = new OpenApiOAuthFlow
{
AuthorizationUrl = new Uri(AuthorizationUrl),
Scopes = new Dictionary {
{ scope, "Default Flow Scopes" } },
TokenUrl = new Uri(TokenUrl),
}
}
});

options.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "oauth2"
}
},
new[] { "Id", "Description" }
},
});
});
Итак, с помощью этого кода в .NET 6/.NET 7, когда я открываю сайт документации Swagger, я могу нажать кнопку Авторизовать, я вижу следующий снимок экрана:
Изображение

_client_id_ уже вставлен, и аутентификация работает. Если я попробую использовать API, он будет работать так, как ожидалось.
Если я сделаю то же самое с версией .NET 8, _client_id_ будет пустым, а области действия будут другими.< /p>
Изображение

Итак, я добавил тот же _client_id_ и выбрал область действия. Я могу снова пройти аутентификацию в Azure Active Directory, но когда я пытаюсь использовать API, запрос отклоняется, поскольку аутентификация недействительна.

Bearer error="invalid_token" ,error_description="Подпись недействительна"

[img]https://i.sstatic.net /vXCoQ.png[/img]

Обновить
По запросу это файл .csproj

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



net8.0
enable
enable
true
True

















А это appsettings.json (без ключей)

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

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"AzureAd": {
"Authority": "https://login.microsoftonline.com/b4e49ba2-xxx",
"CallbackPath": "/signin-oidc",
"ClientId": "d3de6da4-xxx",
"ClientSecret": "xxx",
"Domain": "mydomain.com",
"Instance": "https://login.microsoftonline.com/",
"Scopes": "User.Read",
"TenantId": "b4e49ba2-xxx",
"Audience": "api://544b368d-xxx",
"TokenValidationParameters": {
"ValidAudiences": [
"api://3fb53476-xxx",
"api://544b368d-xxx"
],
"ValidIssuers": [
"https://login.microsoftonline.com/b4e49ba2-xxx/v2.0"
]
}
}
}
Хотелось бы подчеркнуть, что эти настройки работают в проектах на базе NET6 и NET7.

Подробнее здесь: https://stackoverflow.com/questions/775 ... n-with-aad
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • BFF для внутреннего API с AAD/Entra ID B2C (.NET/ASP.NET Core/Identity.Web)
    Anonymous » » в форуме C#
    0 Ответы
    106 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между веб-приложением ASP.NET Core (MVC) и веб-приложением ASP.NET (.NET framework) [дубликат]
    Anonymous » » в форуме C#
    0 Ответы
    55 Просмотры
    Последнее сообщение Anonymous
  • Аутентификация Power BI в веб-API ASP.NET Core в качестве субъекта-службы.
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous

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