Swashbuckle(.netのSwagger)を使用して、WebAPIプロジェクトでAPIキーベースの認証を実行したいと考えています。
スワッシュバックルを以下のように構成しました:
config
.EnableSwagger(c =>
{
c.ApiKey("apiKey")
.Description("API Key Authentication")
.Name("X-ApiKey")
.In("header");
c.SingleApiVersion("v1", "My API");
})
.EnableSwaggerUi();
( https://github.com/domaindrivendev/Swashbuckle#describing-securityauthorization-schemes を参照)
私が期待するswaggerファイルを作成するようです:
"securityDefinitions":{ "apiKey":{ "type": "apiKey"、 "description": "API Key Authentication"、 "名前": "X-ApiKey"、 "in": "ヘッダー" } }
しかし、UIに移動して「試してみる」と、APIキーがヘッダーではなくクエリ文字列(デフォルトの動作だと思います)に挿入されます。
例えば:
curl -X POST --header 'Accept: application/json' 'http://localhost:63563/api/MyMethod?api_key=key'
swaggerを使用して、クエリ文字列の代わりにAPIキーをヘッダーに配置するにはどうすればよいですか?
生成されたswagger.jsonのセキュリティ定義に対応するために、パラダイムが変化しました
ソース https://github.com/domaindrivendev/Swashbuckle.AspNetCore#add-security-definitions-and-requirements
services.AddSwaggerGen(c =>{
c.SwaggerDoc("v1", new Info { Title = "[anything]", Version = "v1" });
c.AddSecurityDefinition("[auth scheme: same name as defined for asp.net]", new ApiKeyScheme() {
In = "header", // where to find apiKey, probably in a header
Name = "X-API-KEY", //header with api key
Type = "apiKey", // this value is always "apiKey"
});
});
見てみな:
config
.EnableSwagger(c =>
{
c.ApiKey("apiKey")
.Description("API Key Authentication")
.Name("X-ApiKey")
.In("header");
c.SingleApiVersion("v1", "My API");
})
.EnableSwaggerUi(c => {
c.EnableApiKeySupport("X-ApiKey", "header");
})