2015-08-23 13 views
9

ich ein neues Web-Api-Projekt erstellt haben, hinzugefügt Asp.Net Identität und konfiguriert OAuth wie so:Wie WebAPI OAuth-Token-Endpunkt in Swagger zeigen

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

Das alles funktioniert gut, ich kann das Gespräch/Token-Endpunkt und holen Sie sich ein Bearer-Token zurück.

Das Problem ist, dass dies nicht in Swagger erkennbar ist, nehme ich an, weil es nicht auf einem Controller ist und daher keine xml-Dokumentation dafür generiert hat.

Kennt jemand eine Möglichkeit, diesen Login-Endpunkt in meinen Swagger-Dokumenten anzuzeigen?

Danke.

Außerdem hätte ich sagen sollen, dass die Swagger-Dokumentation mit all meinen Controllern funktioniert, nur dass mir diese eine offensichtliche Methode fehlt - wie man sich anmeldet.

+0

Ich weiß nicht, ob dies [Link] (http://bitoftech.net/2014/08/25/asp-net-web-api -documentation-using-swagger /) wird helfen oder nicht, aber es wird auch erklärt, wie man eine XML erstellt, wenn es keine gibt – KhawajaAtteeq

+0

Danke, es ist tatsächlich einer der Artikel, die ich zu Setup Swagger gefolgt bin. – Russ

+0

Sie erwähnen Swashbuckle in Ihren Tags, haben Sie sich den Abschnitt "Beschreiben von Security/Authorization Schemes" von https://github.com/domaindrivendev/Swashbuckle/blob/master/README.md angesehen? –

Antwort

11

ApiExplorer generiert keine Informationen automatisch für Ihren Endpunkt, daher müssen Sie einen benutzerdefinierten DocumentFilter hinzufügen, um den Token-Endpunkt manuell zu beschreiben.

Es ist ein Beispiel dafür an 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>(); 
}); 
+0

genau was ich brauchte, danke – Russ

+1

wo müssen wir diese Klasse in Reihenfolge für den HelpPage-Generator, um die richtige HTML zu erstellen? – EeKay

+1

@EeKay: am wahrscheinlichsten in Ihrer SwaggerConfig.cs - es ist der letzte Teil im obigen Codebeispiel (httpConfig.EnableSwagger (...)) – Efrain