В 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;
});
Код: Выделить всё
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" }
},
});
});

_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
Код: Выделить всё
{
"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"
]
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/775 ... n-with-aad