2017-02-22 6 views
1

単純なプロジェクトにAuth0を追加し、ミドルウェアの仕組みを理解しようとしています。ASP.NETコアでミドルウェアを実行する方法

私は私たちの例で正しくASP.NETコアにおけるミドルウェアの概念を理解していれば、クッキーの存在と認証がある場合、そのことによって行うことができ、このコード

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IOptions<AuthSettings> auth0Settings) 
{ 
    loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug(); 

    if (env.IsDevelopment()) 
    { 
     app.UseDeveloperExceptionPage(); 
    } 

    app.UseStaticFiles(); 

    // Add the cookie middleware 
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
     AutomaticAuthenticate = true, 
     AutomaticChallenge = true 
    }); 

    // Add the OIDC middleware 
    var options = new OpenIdConnectOptions("Auth0") 
    { 
     // here there are some configurations 
     // ..................... 
    }; 

    options.Scope.Clear(); 
    options.Scope.Add("openid"); 
    options.Scope.Add("name"); 
    options.Scope.Add("email"); 
    options.Scope.Add("picture"); 

    app.UseOpenIdConnectAuthentication(options); 

    app.UseMvc(routeBuilder => 
    { 
     routeBuilder.MapRoute("Default", "{controller=Home}/{action=Index}"); 
    }); 
} 

を持っている私のStartup.csで

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
     AutomaticAuthenticate = true, 
     AutomaticChallenge = true 
}); 

OpenIdミドルウェアは実行されません。

app.UseOpenIdConnectAuthentication(options); 

誰かがOpenIdミドルウェアが実行してはならないことをどのように知っていますか?我々はそれが常に実行されなければならないことを知っているが、場合には、我々はMVCを使用していないいくつかの静的なファイルを要求するところはどのよう

app.UseMvc(routeBuilder => 
{ 
    routeBuilder.MapRoute("Default", "{controller=Home}/{action=Index}"); 
}); 

を持っている一番下に

答えて

4

パイプライン内のすべてのミドルウェアは、次のミドルウェアを呼び出すことができます。静的ファイルミドルウェアが要求されたファイルを見つけて、チェーン内の次のミドルウェアを呼び出さないようにするため、MVCコントローラに衝突する代わりに静的ファイルを取得する理由があります。単にファイルを応答として返します。

AutomaticAuthenticate認証ミドルウェアでは、常に「着信要求を検査する」という意味です。興味のあるものが見つかった場合は、ClaimsPrincipalを作成してください。この場合、Cookie認証は、サインインCookieが要求に含まれている場合に、サインインされたユーザーのプリンシパルを自動的に作成してから、次のミドルウェアに要求を渡します。

OpenId Connectミドルウェアは実際には実行されますが、AutomaticAuthenticate = trueがあっても要求に興味のあるものは見つからないため、何もしません。コールバックパスへのリクエストを探しています。デフォルトではconstructorCallbackPath = new PathString("/signin-oidc");と設定されています。

クッキーミドルウェアは常に実行されるように、2つの認証ミドルウェアが設定されていますが、OpenId Connectはリクエスト時にIDプロバイダにリダイレクトするだけです(たとえば、MVCコントローラからChallengeResultを返す)。

+0

「自動チャレンジ」プロパティに関するご意見はありますか? UseCookieAuthenticationミドルウェアでAutomaticChallengeをtrueに設定すると、どのような影響がありますか?私の所見は、パイプラインにUseOpenIdConnectAuthenticationがある場合、このプロパティをtrueに設定するべきではないことを示しています。これは、デフォルトでOIDCミドルウェアがAutomaticChallengeをtrueに設定しているためです。 https://github.com/aspnet/Announcements/issues/210 –

+0

AutomaticChallengeは、要求が許可されていない場合にミドルウェアがチャレンジを発行するように直接要求されたかのように動作するかどうかを定義するだけです。不正な結果の実行に近いところに登録されたもの(すなわち、後に登録されたもの)のみが2つあるため、ちょっと意味がありません。実際には、ミドルウェアがデフォルトのものでなければならない特定の用途に依存します。 *通常、* OIDCは、ユーザがログインプロバイダにリダイレクトされるようにするためのデフォルトです。 – juunas

関連する問題