2017-01-19 8 views
1

私はWeb APIプロジェクトのテストとデバッグを行うためのUIとしてswaggerを使用するのが初めてです。Swaggerにカスタムセキュリティを追加する

最近のプロジェクト(タイプ:ASP.NET Web API)で、問題が発生しました。 私のAPIには、そのインターフェイスが誰にも明らかではないため、セキュリティはありませんでした。 しかし、私はすべての人が私の完全なドキュメンテーションにアクセスすることができますので、スワッガーUIを確保する必要があります。

私はswagbulkele nuget-packageで簡単にスワッガーを追加して以来、私はどのようなセキュリティを追加するのか分かりません。もし誰かの体がステップウォークスルーでステップを与えることができたら、本当にそれを感謝します。

もう一つは、私がSwaggerConfig.csに線の下に追加しようとしたが、それは特別なAPIキーを執行しなかったと私は単に私のブラウザでhttp://localhost:4505/swaggerのようないろいろ書いを入力して闊歩UIを開くことができるということです。

GlobalConfiguration.Configuration 
    .EnableSwagger(c => 
     { 
     c.ApiKey("key-11111-0000-1111-test") 
       .Description("API Key Authentication") 
       .Name("apiKey") 
       .In("header"); 

     c.EnableApiKeySupport("apiKey", "header"); 
     }); 

(上記のコードブロックから質問に関係のない設定は省略したことに注意してください)

APIキーのセキュリティをアプリケーションに適用する必要がありますか?そうなら、簡単な方法を示してくださいそれ。

更新#1: swagger-uiのアドレスを変更するだけでハックが見つかりました。 だけSwaggerConfig.csに次の行を追加します

GlobalConfiguration.Configuration 
      .EnableSwagger(c => 
       { 
        //a long list of auto generated stuff 
        //don't touch them if you don't know how to change them 
       }) 
        //next line is what you add 
        .EnableSwaggerUi("sandbox-passphrase-000000-passphrase2/swagger/{*assetPath}"); 

その後威張っ-UIへのアクセスリンクは以下のようになります。

http://your-api.com:port/sandbox-passphrase-000000-passphrase2/swagger/index

しかし、これは私が欲しいものではありません、私は権限のないアクセスを防ぐために、swagger-uiにユーザー名/パスワードのテキストボックスを追加する必要があります。

+0

あなたのAPIは、どのような方法で確保されていますか? – VisualBean

+0

私は "私のAPIは、そのインターフェースが誰にも明らかではないのでセキュリティはありません"と言っています。 – AmiNadimi

+0

カスタム索引ビューをどのように追加すればいいですか?それ以降、文書を隠すにはどうしたら、入力したユーザー名とパスワードを確認してください。 – AmiNadimi

答えて

-1

もう1つのハックが見つかりました。

  • 我々は、我々は簡単なJavaScriptコードで威張っ-UIから本体容器を非表示になります

enter image description here

  • パスワードボックスとして威張っ-UIのAPIキーテキストボックスを使用します。

    public class SwaggerConfig 
        { 
         public static void Register() 
         { 
          var thisAssembly = typeof(SwaggerConfig).Assembly; 
          GlobalConfiguration.Configuration 
           .EnableSwagger(c => 
            { 
             c.SingleApiVersion("v1", "Swagger with api key test"); 
            }) 
           .EnableSwaggerUi(c => 
            { 
            c.InjectJavaScript(thisAssembly, 
            "enterYourAPIAssemblyNameHere.swagger.swagger_script.js"); 
            }); 
         } 
        } 
    

    2:正しいパスフレーズが

は、以下のよう

変化SwaggerConfig.cs次のステップに従ってテキストボックスの内部に入力されるまで

  • 本体内容が隠されています。は、プロジェクトのルートディレクトリにフォルダを追加し、swagger

    3.という名前を付けたフォルダ内のJavaScriptファイルを追加し、名前はswagger_script.jsと以下のように、それの内容を編集します。

    var wrapper = document.getElementById("swagger-ui-container"); 
    var child = wrapper; 
    
    var parent = wrapper.parentNode; 
    wrapper.parentNode.removeChild(wrapper); 
    
    var apikey = document.getElementById("input_apiKey"); 
    apikey.setAttribute('type', 'password'); 
    
    apikey.onchange = function() { 
        var wrapper = document.getElementById("swagger-ui-container"); 
        var key = "1234567890"; 
          var enteredkey = apikey.value; 
          if (enteredkey == key) { 
           parent.appendChild(child); 
          } else { 
           child = wrapper; 
           wrapper.parentNode.removeChild(wrapper); 
          } 
    } 
    

    swagger-script.jsのプロパティに移動して、ビルドアクションをEmbedded Resourceに設定します。

    スワッガー機能にアクセスするには、1234567890が鍵になります。

    セキュリティをもっと必要とする場合は、apiにアクションを追加し、ハッシュされた文字列を返すようにしてください。javascriptではそのアクションを呼び出し、ハッシュされたパスフレーズを比較します。

    しかし、これはこれを処理する最善の方法ではありませんが、まだそれはハックとして受け入れられると言いました。

    Swashbuckleバージョンは5.5.3

  • +0

    私はそれを「安全」とは考えていません。 1つはJSコンソールを開き、「保護された」部品を戻すことができます。さらに簡単にするには、別のswaggerUIを使用してswagger docs urlを開きます。 –

    +0

    私はこれがこれを処理する最善の方法ではないと言ったが、それでもハックとして受け入れられる! – AmiNadimi

    関連する問題