2016-06-28 20 views
1

私は最近、OWINミドルウェアを使用してVisual Studio 2012でWeb API 2プロジェクトを開始し、OAuth2でユーザーを認証しました。 this tutorial (Token Based Authentication)に概説されているように、私はトークンに基づく認証を組み込んだ。認証部分はうまく動作します。いくつかのテストAPIメソッドを追加しました。私はAPIドキュメントのためにSwaggerを利用したいと思っていました。 SwaggerからのAPI呼び出しが認証に失敗するという例外を除いて、私はその部分もうまく機能しています。POST OAuth2認証リクエストにWeb API 2でSwaggerを設定するにはどうすればよいですか?

調査の結果、SwaggerをOWINミドルウェアに接続する方法については、Erik Dahl's postが見つかりました。投稿に基づいてSwaggerを設定した後、各APIメソッドの横にSwagger UIの認証ボタンが表示されるようになりました。ただし、認証しようとすると、Swagger内の認証はGET要求を使用して行われます。ただし、Web APIの認証では、POST要求である必要があります。 Swaggerを設定して認証リクエストをPOSTにすることは可能ですか?そうでない場合は、私のAPIがトークン認証のGET要求を受け入れることを許可する必要がありますか?この仕事をする最良の方法は何でしょうか?

注:リクエストはまだ私の認証ロジックにぶつかりますが、client_idとclient_secretはGETリクエストで渡されません。POST要求の場合のみです。

は、ここに私の闊歩の設定です:

httpConfig 
    .EnableSwagger(c => 
    { 
     c.SingleApiVersion("v1", "Sample API"); 

     c.ApiKey("token") 
      .Description("API Key Authentication") 
      .Name("Bearer") 
      .In("header"); 

     c.OAuth2("oauth2") 
      .AuthorizationUrl("/oauth/token") 
      .Flow("implicit") 
      .Description("OAuth2 authentication") 
      .Scopes(scopes => 
      { 
       scopes.Add("sampleapi", "Sample API"); 
      }); 


     c.OperationFilter<AssignOAuth2SecurityRequirements>(); 
    }) 
    .EnableSwaggerUi(c => 
    { 
     c.EnableOAuth2Support(
      clientId: "Sample_App", 
      clientSecret: "xxxxx", 
      realm: "test-realm", 
      appName: "Swagger UI"); 
    }); 

そして、ここでは私のOAuthの設定です:

app.CreatePerOwinContext<ApiClientRepo>(ApiClientRepo.Create); 
app.CreatePerOwinContext<MeetingRegistrantRepo>(MeetingRegistrantRepo.Create); 

OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() 
{ 
    //For Dev enviroment only (on production should be AllowInsecureHttp = false) 
    AllowInsecureHttp = true, 
    TokenEndpointPath = new PathString("/oauth/token"), 
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), 
    Provider = new CustomOAuthProvider(), 
    AccessTokenFormat = new CustomJwtFormat("http://localhost:51071"), 
    RefreshTokenProvider = new SimpleRefreshTokenProvider() 
}; 

// OAuth 2.0 Bearer Access Token Generation 
app.UseOAuthAuthorizationServer(OAuthServerOptions); 

答えて

1

いいえ、私はちょうど闊歩を満たすためにGETするPOSTからの認証方法を変更しません。

http://danielwertheim.se/use-identityserver-in-swaggerui-to-consume-a-secured-asp-net-webapi/それはそのようにそれを試してみる価値があるウォルド:

は、私はあなたがここでやりたい助けるべき他の記事を見つけました。 POSTからGETへの変更は、リクエストの本体でパラメータを渡すことができなくなり、リクエストのURLでパラメータを渡す必要があることを意味し、その結果、すべてが安全ではありません。

はい、ClientIDとClientSecretは依然としてAuthorization Headerの一部ですが、依然としてこのようなことはしません。 SwaggerはAPIのアーキテクチャを決めるべきではないので、そこには行かないでください。

+0

あなたの答えの記事が私の目標の回避策を提供していますが、私はその荷物をすべてプロジェクトに追加したいとは思っていません。これは小さなプロジェクトで、Swagger設定を変更する簡単な解決策がない場合、Web APIのヘルプページを使用します。彼らは私のAPIドキュメントのための十分な情報を提供します。私は代わりにそのルートを選ぶと信じています。はい、私はあなたに同意する、私はPOSTからGETのauthメソッドを変更しません。 – Sebbo

関連する問題