2017-11-28 7 views
1

Windows認証を使用する自己ホスト型Web APIアプリケーション(サーバーアプリケーション)があります。web.apiでのWindows認証

のWindows認証は、[承認]タグを使用し、その後System.Net.HttpListener

System.Net.HttpListener listener = (System.Net.HttpListener)appBuilder.Properties["System.Net.HttpListener"]; 
listener.AuthenticationSchemes = System.Net.AuthenticationSchemes.IntegratedWindowsAuthentication 
        | System.Net.AuthenticationSchemes.Anonymous; 

とコントローラ上で次のAuthenticationSchemesを設定することにより、Startup.cs/Configurationで有効になっています。次に、すべてのコントローラメソッドについてHttpRequestContextからPrincipal.Identityを抽出して、誰が呼び出しているかを確認できます。

これは、発信者とサーバーが同じホスト上にある場合にのみ有効です。呼び出し元のアプリケーションが別のホスト上にあるとすぐに、すべての要求がブロックされ、401が無許可になり、コントローラメソッドがサーバーにヒットしません。これは、呼び出し元のアプリケーションがサーバーと同じユーザーアカウントで実行されている場合でも同じです。それで、特別な設定が必要なので、web.apiのWindows認証は異なるマシン間で動作しますか?

よろしくCORSを使用するための呼び出しを追加し、あなたのWebAPIのスタートアップのクラスで

+0

編集:私はフィドラーで、いくつかのトレースを実行しようとしました、とフィドラーが有効になっている場合、要求は動作するようです(私が行われている3つの要求を参照してください) – meisterd

+0

ですそれらのマシンとサーバーの間にFiddler以外のプロキシがありますか? NTLM/Kerberosでは、プロキシ経由での認証が許可されないためです。 – Jimi

答えて

0

をmeisterd。 Microsoft.Owinをまだ持っていない場合は、パッケージに追加する必要があります。これにより、他のホストからあなたのAPIにアクセスできるようになります。

それは次のようになります。

public class Startup 
{ 
    public void Configuration(IAppBuilder appBuilder) 
    { 
     HttpConfiguration config = new HttpConfiguration(); 
     WebApiConfig.Register(config); 

     //... Your other startup code 

     appBuilder.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
+0

我々はまもなくそれを試してみるでしょう。私はちょうど、作業中の(活動中のバイエルンの)活動中のリクエストからのwiresharkのトレースを見ました。違いは、KRBエラー:KRB5KRB_AP_ERR_MODIFIEDが動作していない例です。 Kerberosの問題があることを示しているようです。フィドラーが走っているときに消えてしまうのは奇妙です。 – user3566056