web-dev-qa-db-ja.com

SwashbuckleとASP.NETIdentityを使用して、Swaggerの特定のAPIコントローラーへのアクセスを制限します

そこで、Swaggerを使い始めました。私はその機能が大好きですが、すべてのメソッドが一般に公開されているかどうかについては疑問があります。

私が理解している限り、Swaschbuclkeの「auth」メソッドに含まれているものはすべて実際にはAPI自体に関するものですが、そこでは助けは必要ありません。私のAPIはすべてAPI ID /キーのペアで保護されています。

どういうわけかASP.NETIdentity(ログインシステム)を利用してAPIページ(/ swagger/ui/index)へのアクセスを制限したいと思います。

方法はありますか? Swaschbuckleのメソッドはありますか?ルート/ IDハックはありますか?

どんな助けでも大歓迎です。

編集1:[ApiExplorerSettings(IgnoreApi = true)]属性は私が探しているものではありません-IDに関係なく、メソッドへのすべてのアクセスを制限します。

12
Mikhail Neverov

Swaggerドキュメントでの個々のAPIの公開の制限について:

スワッシュバックル5.x:

Swashbuckle 5.xには、IgnoreObsoleteActions(設定する必要があります。デフォルトでは有効になっていません)という構成オプションがあり、アクションに_[Obsolete]_属性がある場合にアクションを非表示にします。

例:構成

_httpConfiguration
    .EnableSwagger(c =>
        {
            c.IgnoreObsoleteActions();
        });
_

詳細については、 ドキュメント をご覧ください。

Swashbuckle 4.1.x(または廃止された属性を使用したくない場合):

Swashbuckleは、 IApiExplorer の上にSwaggerドキュメントを作成します。属性--[ApiExplorerSettings(IgnoreApi = true)]-を追加して、ApiExplorerSettingsコントローラークラスまたは個々のコントローラーメソッドを管理し、ドキュメントの生成時にエクスプローラー(およびその後のSwashbuckle)がそれらを無視するようにする必要があります。

例:個々のアクション

_/// Ignore 'GetFoo' in documentation
public class FooBarController
{
    [ApiExplorerSettings(IgnoreApi = true)]
    public Bar GetFoo
    {
       ...
    }

    public Bar GetBar
    {
       ...
    }
}
_

例:コントローラークラス

_/// Ignore every controller method in FooBarController in documentation
[ApiExplorerSettings(IgnoreApi = true)]
public class FooBarController
{
    public Bar GetFoo
    {
       ...
    }

    public Bar GetBar
    {
       ...
    }
}
_

詳細はこちら GitHub Issue 。私はこれをSwashbuckle4.1.xで自分で使用しました。

18
Anthony Neace

プロジェクトルートに「swagger」という新しいフォルダを作成しました。フォルダ名は、URLをSwaggerドキュメントと一致させる必要があります。

新しく作成されたフォルダーに新しいWeb.configファイルを追加しました。

<configuration> 
<system.web> 
<authorization> 
<deny users="?" /> 
</authorization> 
</system.web> 
<system.webServer> 
<modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 
</configuration>

答えが見つかりました ここ

別のオプションは次のとおりです。

「頭のてっぺんから、DelegatingHandlerがここで必要なものだと思います。」

答えが見つかりました ここ

1
pirin