Я пытаюсь настроить Swagger в своем приложении AspNetCore 2.1 с помощью Azure Active Directory V2, но, похоже, я не могу понять, что это правильно.Я могу настроить установку так, чтобы swagger запрашивал, перенаправлял и успешно аутентифицировал моего клиента / пользователя, но при передаче токена носителя на сервер выдает ошибку Bearer error="invalid_token", error_description="The signature is invalid"
.Я создал GitHub-репозиторий с проектом, который я пытаюсь заставить работать со всей его конфигурацией (https://github.com/alucard112/auth-problem)
Мне удалось заставить работать конечную точку V1, установив для ресурса идентификатор клиента AADприложение, которое приводит к тому, что для токена JWT в качестве идентификатора клиента установлен идентификатор клиента приложения. В конечной точке V2 для параметра aud устанавливается то, что я считаю ресурсом API Graph '00000003-0000-0000-c000-000000000000«Я считаю, что это моя проблема на данный момент, хотя я не уверен на 100%. Конечные точки V2, похоже, не имеют возможности определить аудиторию, как это сделал V1, если, конечно, с моей стороны нет некоторого контроля».1005 *
Мой файл запуска имеет следующую структуру:
Аутентификация настроена следующим образом:
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, options =>
{
options.Authority = $"https://login.microsoftonline.com/{tenantId}";
options.TokenValidationParameters = new TokenValidationParameters
{
// In multi-tenant apps you should disable issuer validation:
ValidateIssuer = false,
// In case you want to allow only specific tenants,
// you can set the ValidIssuers property to a list of valid issuer ids
// or specify a delegate for the IssuerValidator property, e.g.
// IssuerValidator = (issuer, token, parameters) => {}
// the validator should return the issuer string
// if it is valid and throw an exception if not
};
});
И чванство настроено следующим образом:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info
{
Title = "Protected Api",
});
c.OperationFilter<SecurityRequirementsOperationFilter>();
//IMATE - StevensW
// Define the OAuth2.0 scheme that's in use (i.e. Implicit Flow)
c.AddSecurityDefinition("oauth2", new OAuth2Scheme
{
Type = "oauth2",
Flow = "implicit",
AuthorizationUrl = $"https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/authorize",
TokenUrl = $"https://login.microsoftonline.com/common/{tenantId}/v2.0/token",
Scopes = new Dictionary<string, string>
{
{ "openid", "Unsure" },
{ "profile", "Also Unsure" }
}
});
});
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
c.OAuthClientId(Configuration.GetValue<string>("AzureAd:ClientId"));
c.OAuthAppName("Protected API");
//c.OAuthUseBasicAuthenticationWithAccessCodeGrant();
//c.OAuthClientSecret(Configuration.GetValue<string>("AzureAd:ClientId"));
});
Я надеюсь настроить пользовательский интерфейс Swagger на использование конечной точки AAD V2 и разрешить многопользовательский вход в систему, который позволяет успешно выполнять аутентифицированные вызовы API.р или направление будет принята с благодарностью.