Ich möchte den Zugriff auf swagger-ui und Metadaten nur erlauben, wenn der Benutzer in unserer Web-App authentifiziert ist (forms auth), aber ich möchte den API-Zugriff jederzeit erlauben (API hat einige öffentliche Methoden und einige, die grundlegende Auth erfordern).ServiceStack API-Dokumentation in Swagger-UI hinter den geschlossenen Türen
Also, was ich tat, das ich diesen Weg Präfix für API hinzugefügt:
public override RouteAttribute[] GetRouteAttributes(Type requestType)
{
var routes = base.GetRouteAttributes(requestType);
routes.Each(x => x.Path = "/API" + x.Path);
return routes;
}
Und:
ServiceRoutes = new Dictionary<Type, string[]> {
{
typeof(AuthenticateService), new[] { "/api/auth", "/api/auth/{provider}" }
},
}
Und diese auch in Web-config:
<location path="api">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
Und die Sache ist, dass whe n Ich gehe jetzt zu /api/
, das funktioniert gut, aber wenn ich versuche, eine Methode aufzurufen, bekomme ich reddirected auf meine login
Route.
Gibt es eine Möglichkeit, dies zu lösen, wie ich es begonnen habe, oder gibt es eine bessere Möglichkeit, die Dokumentation zu schützen?
Super, danke. – ShP
Eine weitere Frage: Ich habe meine App auf der https-Site bereitgestellt, so dass sie wie folgt aussieht: https: // example.com/mywebapp/swagger-ui /, aber sie leitet weiter um: https://example.com: 8443/swagger-ui/'(also den Port hinzufügen und entfernen Sie den Teil, wo die App tatsächlich sitzt), warum ist das? Wenn ich es lokal ausführe funktioniert es gut ... – ShP
@ShP Da Sie einen Proxy durchlaufen und die generierte URL auf der eingehenden Anfrage basiert. Sie können 'Config.WebHostUrl' einstellen, um festzulegen, welche externe URL Sie stattdessen verwenden möchten. – mythz