20

新しい Web Api プロジェクトを作成し、Asp.Net ID を追加して、次のように OAuth を構成しました。

OAuthOptions = new OAuthAuthorizationServerOptions
{
    TokenEndpointPath = new PathString("/Token"),
    Provider = new ApplicationOAuthProvider(PublicClientId),
    AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
    AllowInsecureHttp = true
};

これで問題なく動作します。/Token エンドポイントを呼び出して、ベアラー トークンを取得できます。

問題は、これがコントローラー上にないため、Swagger で検出できないため、xml ドキュメントが生成されないことです。

このログイン エンドポイントを私の Swagger ドキュメントに表示する方法を知っている人はいますか?

ありがとう。

また、Swagger のドキュメントは私のすべてのコントローラーで機能していると言うべきでした。ただ、この 1 つの明らかな方法、つまりログイン方法が欠けているだけです。

4

2 に答える 2

34

ApiExplorer はエンドポイントの情報を自動的に生成しないため、トークン エンドポイントを手動で記述するには、カスタム DocumentFilter を追加する必要があります。

https://github.com/domaindrivendev/Swashbuckle/issues/332にこの例があります:

class AuthTokenOperation : IDocumentFilter
{
    public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
    {
        swaggerDoc.paths.Add("/auth/token", new PathItem
        {
            post = new Operation
            {
                tags = new List<string> { "Auth" },
                consumes = new List<string>
                {
                    "application/x-www-form-urlencoded"
                },
                parameters = new List<Parameter> {
                    new Parameter
                    {
                        type = "string",
                        name = "grant_type",
                        required = true,
                        @in = "formData"
                    },
                    new Parameter
                    {
                        type = "string",
                        name = "username",
                        required = false,
                        @in = "formData"
                    },
                    new Parameter
                    {
                        type = "string",
                        name = "password",
                        required = false,
                        @in = "formData"
                    }
                }
            }
        });
    }
}

httpConfig.EnableSwagger(c =>
{
    c.DocumentFilter<AuthTokenOperation>();
});
于 2015-09-01T07:30:30.647 に答える