2017-11-03 12 views
3

Webアプリケーションでユーザーが認証されている場合にのみswagger-uiとメタデータへのアクセスを許可したいが、APIアクセスを常に許可したいAPIにはいくつかのパブリックメソッドと基本認証を必要とするものがあります)。Swagger-UIのServiceStack APIドキュメントが閉鎖されている

public override RouteAttribute[] GetRouteAttributes(Type requestType) 
{ 
    var routes = base.GetRouteAttributes(requestType); 
    routes.Each(x => x.Path = "/API" + x.Path); 
    return routes; 
} 

そして:

ServiceRoutes = new Dictionary<Type, string[]> { 
{ 
     typeof(AuthenticateService), new[] { "/api/auth", "/api/auth/{provider}" } 
    }, 
} 

そして、これだけでなくウェブの設定で:

<location path="api"> 
<system.web> 
    <authorization> 
    <allow users="*"/> 
    </authorization> 
</system.web> 

は、だから私は何をしたか、私はAPIのために、このルートの接頭辞を追加します

そして事はそれですwhe n今は/api/に行きますが、何らかのメソッドを呼び出せば、loginルートにreddirectされます。

私が始めたようにこれを解決する方法はありますか、それとも文書を保護する良い方法がありますか?

答えて

2

あり、メタデータページに認証を要求するように明示的なオプションはませんが、あなたはと/metadata/swagger-uiページへのアクセスを保護するためにPreRequestFilterを使用することができます。

PreRequestFilters.Add((req, res) => 
{ 
    if (req.PathInfo.StartsWith("/metadata") || req.PathInfo.StartsWith("/swagger-ui")) 
    { 
     var session = req.GetSession(); 
     if (!session.IsAuthenticated) 
     { 
      res.StatusCode = (int)HttpStatusCode.Unauthorized; 
      res.EndRequest(); 
     } 
    } 
}); 

そして、あなたならば/openapi JSON仕様へのアクセスを保護するには」あなたが古いを使用している場合

public AppHost() 
{ 
    typeof(OpenApiService) 
     .AddAttributes(new AuthenticateAttribute()); 
} 

Swagger 2.0/Open API Featureを使用して再使用するには、動的に実行時に[Authenticate]属性を追加することができます10あなたがバックエンドサービスへのアクセスを保護することができます。これは、あなたがServiceStack AuthenticationないASP.NET認証を使用していると仮定し

public AppHost() 
{ 
    typeof(SwaggerResource) 
     .AddAttributes(new AuthenticateAttribute()); 
    typeof(SwaggerResources) 
     .AddAttributes(new AuthenticateAttribute()); 
} 

+0

恐縮です、ありがとうございます。 – ShP

+0

もう1つ質問がありますが、私はhttpsサイトに自分のアプリケーションを配置したので、 'https:// example.com/mywebapp/swagger-ui /'のように見えますが、 'https://example.com: 8443/swagger-ui/'(ポートを追加して、アプリケーションが実際に座っている部分を削除する)、それはなぜですか?ローカルで実行すると正常に動作します... – ShP

+0

@ShPプロキシを経由しているため、生成されたURLは着信要求に基づいています。 'Config.WebHostUrl'を設定して、代わりに使用する外部URLを指定することができます。 – mythz

関連する問題