web-dev-qa-db-ja.com

スワッシュバックル付きヘッダーのAPIキー

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キーをヘッダーに配置するにはどうすればよいですか?

11
Not loved

アップデート2019-04-10:

生成された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");
    })
18
Keith Ripley

original に基づいてカスタムのindex.htmlを挿入し(説明 here のように)、関数addApiKeyAuthorizationの次の行を変更する必要があります。

var apiKeyAuth = new SwaggerClient.ApiKeyAuthorization("X-ApiKey", key, "header");
2
venerik