2016-05-20 7 views
0

私はC#で書かれた晴れのモバイルアプリのAPIを持っています。Swagger - ユーザー名の追加/カスタムヘッダーでのログインと使用

Nugetを使用してSwaggerを追加しました。

スワッガーは完全に機能するようです。しかし、「すぐに使える」ということは、ユーザーがスワーザーホームページの右上にAPIキーを入力できるようにすることです。この値は「?/ api_key = xxxx」を含むすべてのテストコールに追加されます。

スワッガーがコールの本文に「X-ZUMO-AUTH」というカスタムヘッダーとしてこの「キー」を送信する方法を考案します。

理想的には、これについても展開したいと思います。

ユーザー名/パスワードを取得する「auth」API呼び出しがあります...「auth」エンドポイントを呼び出すユーザー名とパスワードの組み合わせでUIの「キー」フィールドを削除できたら大丈夫です私は素晴らしいことだパート1を実現することができる場合、私は... .. API ...ここでもカスタムヘッダーとして「X-ZUMO-AUTH」へのすべての後続の呼び出し

を返された値を使用しています誰かが正しい方向に私を向けることができますか?

答えて

2

javacriptソリューションの場合はCustomize Authentication Header in SwaggerUI using Swashbuckleを参照してください。 MVCまたはWebAPIを使用している場合は、GlobalConfiguration.Configuration.EnableSwagger(c => { })の一部としてSwaggerConfig.csにc.OperationFilter<AddAuthorizationHeaderParameterOperationFilter>();を追加します。

public class AddAuthorizationHeaderParameterOperationFilter : IOperationFilter 
{ 
    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) 
    { 
     var filterPipeline = apiDescription.ActionDescriptor.GetFilterPipeline(); 
     var isAuthorized = filterPipeline 
             .Select(filterInfo => filterInfo.Instance) 
             .Any(filter => filter is IAuthorizationFilter); 

     var allowAnonymous = apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any(); 

     if (isAuthorized && !allowAnonymous) 
     { 
      if (operation.parameters == null) 
      { 
       operation.parameters = new List<Parameter>(); 
      } 
      operation.parameters.Add(new Parameter 
      { 
       name = "Authorization", 
       @in = "header", 
       description = "access token", 
       required = true, 
       type = "string" 
      }); 
     } 
    } 
} 
+0

多くの感謝! - 一つの見解は、全体のコントローラではなく、すべてのコントローラのアクションに[Authorize]を入れなければならないということです。 –

0

あなたが実行されるカスタムJavaScriptを追加することができますし、それが3Dパーティのサービスへの呼び出しを行うと、としてそれを追加します。

次に、あなたは次のようにクラスを追加することで設定することができますカスタムトークン。

すでにstackoverflowに重複があります。 これを試すこともできますpostも同様です。

これは、あなたがjsファイルを追加する方法です:

c.InjectJavaScript(thisAssembly, "SwashbuckleCustomAuth.CustomContent.basic-auth.js"); 

そして、これは、1の例である:

$('#explore').off(); 

$('#explore').click(function() { 
    var key = $('#input_apiKey')[0].value; 
    var credentials = key.split(':'); //username:password expected 

$.ajax({ 
    url: "yourAuthEndpoint", 
    type: "post", 
    contenttype: 'x-www-form-urlencoded', 
    data: "grant_type=password&username=" + credentials[0] + "&password=" + credentials[1], 
    success: function (response) { 
     var bearerToken = 'Bearer ' + response.access_token; 

     window.swaggerUi.api.clientAuthorizations.add('Authorization', new SwaggerClient.ApiKeyAuthorization('Authorization', bearerToken, 'header')); 
     window.swaggerUi.api.clientAuthorizations.remove("api_key"); 
     alert("Login successfull"); 
     }, 
     error: function (xhr, ajaxoptions, thrownerror) { 
     alert("Login failed!"); 
     } 
    }); 
}); 

P.S.申し訳ありませんが、他の回答には既に同じ投稿への参照があることに気付かなかった。しかし、どこかに詳細があるので投稿があります。

関連する問題