#asp.net-core #swagger-ui #aspnetboilerplate
#asp.net-core #swagger-пользовательский интерфейс #aspnetboilerplate
Вопрос:
Я использую стандартную платформу AspNet. Я пытаюсь реализовать аутентификацию через AzureAD в своем приложении. Я использую ASP.NET ядро 3.0 и тестирование моего приложения через swagger. Я вижу, что токен не включается в заголовок.
Метод запуска ConfigureServices().cs
{
Type = SecuritySchemeType.OAuth2,
Flows = new OpenApiOAuthFlows()
{
Implicit = new OpenApiOAuthFlow()
{
TokenUrl = new Uri(My Token Url),
AuthorizationUrl = new Uri(My Authorization Url),
Scopes = { { "api://357...../user_impersonation", "Access adt-service" } }
}
}
});
Метод Configure() Startup.cs:
{
options.OAuthClientId("22............");
options.OAuthScopeSeparator(" ");
});
Пожалуйста, дайте мне знать, если я что-то упустил.
Ответ №1:
Получаете ли вы токен в первую очередь при аутентификации? В моем ответе я предполагаю, что это так.
Вы не показываете это полностью в своем фрагменте, но вы должны делать что-то вроде приведенного ниже, чтобы настроить службы Swagger, верно?
services.AddSwaggerGen(options =>
{
options.SwaggerDoc(...);
options.AddSecurityDefinition(
"oauth",
new OpenApiSecurityScheme
{
Type = SecuritySchemeType.OAuth2,
Flows = new OpenApiOAuthFlows()
{
Implicit = new OpenApiOAuthFlow()
{
TokenUrl = new Uri(My Token Url),
AuthorizationUrl = new Uri(My Authorization Url),
Scopes = { { "api://357...../user_impersonation", "Access adt-service" } }
}
}
});
});
Если это так, просто добавьте требование безопасности в свои параметры, и токен уже будет включен в ваши запросы:
services.AddSwaggerGen(options =>
{
options.SwaggerDoc(...);
options.AddSecurityDefinition(
"oauth",
new OpenApiSecurityScheme
{
Type = SecuritySchemeType.OAuth2,
Flows = new OpenApiOAuthFlows()
{
Implicit = new OpenApiOAuthFlow()
{
TokenUrl = new Uri(My Token Url),
AuthorizationUrl = new Uri(My Authorization Url),
Scopes = { { "api://357...../user_impersonation", "Access adt-service" } }
}
}
});
options.AddSecurityRequirement(
new OpenApiSecurityRequirement {
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference {
Type = ReferenceType.SecurityScheme,
Id = "oauth"
}
},
oauthScopes.Keys.ToArray() // array with scopes' keys used above in the security definition
}
});
});
Пожалуйста, обратите внимание на добавление options.AddSecurityRequirement
. Имя / идентификатор "oauth"
— это просто идентифицирующее имя для определения безопасности.
Эти фрагменты работают для .net 5. Я полагаю, что они могут сделать это для .net core 3
Комментарии:
1. Эта строка была ключевой! oauthScopes.Keys. toArray() // массив с ключами областей, используемыми выше в определении безопасности. Я видел так много примеров, и это первый раз, когда я когда-либо видел какое-либо внимание, уделяемое этой строке, помимо new List<string>() . Спасибо. Он по-прежнему не закрывает значок блокировки, но возвращаемый id_token фактически принадлежит пользователю, а не только клиенту.