2016-10-14 9 views
0

2つのエンドポイントAとBを含むWeb Apiを開発しています.AのBasicAuthenticationとBのカスタム検証を使用する必要があります。 2つのプロジェクトで、そのために私は2パイプとOWINを使用しています:2つのパイプラインとそれぞれ異なる認証を持つWeb API

 app.Map("/api/A", basicAuth => 
     {     
      basicAuth.UseBasicAuthentication(container); 
     }); 

     app.Map("/api/B", idTokenAuth => 
     {     
      idTokenAuth.UseBearerAuthentication(container); 
     }); 

私が経験しています問題は、認証後に、それは常にHTTP/1.1 404見つかりませんでし対応するコントローラとリターンにリダイレクトしないということです。

チップはありますか?

+1

これは複数のパイプラインを扱うときに便利だとわかりました - [この記事をチェック](http://www.strathweb.com/2016/05/running-multiple-asp-net-web-api-pipeline-side- by-side /) – inan

答えて

1

これ以降はapp.UseWebApiが必要ですか?ここでMapを使用する際の問題は、親パイプラインが完了したときに親パイプラインに再結合しないことです(IIS/MVCに渡されますが)。

if (path.startswith("/api/a")) { DoBasicAuth(optionsA); } if (path.startswith("/api/b")) { DoBasicAuth(optionsB); } DoWebApi();

しかし、どのような地図は、実際にしている:ここにあなたがしたい...

アナロジーはあります

if (path.startswith("/api/a")) { DoBasicAuth(optionsA); return; } if (path.startswith("/api/b")) { DoBasicAuth(optionsB); return; } DoWebApi();

我々は異なるUseWhenパターンでいるので作ってみましたあなたはフォローできますが、ソースをコピーしてバックポートする必要があります: https://github.com/aspnet/HttpAbstractions/blob/dev/src/Microsoft.AspNetCore.Http.Abstractions/Extensions/UseWhenExtensions.cs

+0

あなたは正しいです、それはまさに私の問題、リターンです!私はリンクの例を使って動作させることはできませんでしたが、owinの動作についても詳しく説明しました。私が望む(2つのauthメソッド)の目的のために、私は2つのauthメソッドを実装し、それらを同じパイプラインに追加し、パッシブAuthModeを使って要求を処理することができます。 – Bonomi

関連する問題