2017-01-24 8 views
2

私のプロジェクトで条件付きミドルウェアを実装するために、thisの記事をたどりました。 しかし、私たちのプロジェクトを.netcore 1.0から.netcore 1.1にアップグレードしたので、動作しません。条件付きミドルウェアin-aspnet-coreがasp.netコア1.1で動作していません

私は起動時に以下のコードを書いています。

Func<HttpContext, bool> isApiRequest = (HttpContext context) => context.Request.Path.ToString().StartsWith("/api/"); 

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); 

//For MVC not API 
app.UseWhen(context => !isApiRequest(context), appBuilder => 
{ 
    app.UseCookieAuthentication(new CookieAuthenticationOptions 
    { 
     AuthenticationScheme = "Cookies", 
     AutomaticAuthenticate = true 
    }); 

    app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
    { 
     AuthenticationScheme = "oidc", 
     SignInScheme = "Cookies", 
     AutomaticChallenge = true, 


     Authority = authority, 
     RequireHttpsMetadata = false, 

     ClientId = "sampleClient", 
     //ClientSecret = "secret", 

     Scope = { "openid" , "profile" }, 

     ResponseType = "id_token token",//"code id_token",       

     SaveTokens = true 
    }); 
}); 

//FOR API 
app.UseWhen(context => isApiRequest(context), appBuilder => 
{ 
    app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions() 
    { 
     Authority = authority, 
     RequireHttpsMetadata = false, 
     AllowedScopes = 
     { 
      "scope1", 
      "scope2" 
     } 
    }); 
});      

は今、私はベースの認証をクッキーではない、でもその条件のAPI認証作業において、ビューベースにActionMethodを(APIで始まらないことを意味)にアクセスしようとします。 APIベースの認証は完全に正常に動作します。

我々は、Identity Serverの最新バージョン4.

すべてのヘルプ/ポインタが理解されるであろうに私たちのプロジェクトを構築しています。

+0

があなたの代わりに 'app'の条件分岐内の' appBuilder'を使用することではないでしょうか?ちょうど考え、それはちょっと変わったように見えます。 – juunas

+0

本当に奇妙です。 configファンクションは起動時に実行されるので、条件が存在しなかったかのようにすべてのミドルウェアを登録します**。 – juunas

+0

VS2017の.netコア1.1で同じ問題が発生しています。与えられたデリゲートは決して実行されないようです。 – NoSaidTheCompiler

答えて

1

appBuilderを使用しないように両方の条件ブロックを変更します。app

ブログの記事が間違っています。これで、子ビルダーの代わりにトップレベルのミドルウェアスタックにそれらを登録しています。例えばので

app.UseWhen(context => !isApiRequest(context), appBuilder => 
     { 
      appBuilder.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationScheme = "Cookies", 
       AutomaticAuthenticate = true 
      }); 

      appBuilder.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
      { 
       AuthenticationScheme = "oidc", 
       SignInScheme = "Cookies", 
       AutomaticChallenge = true, 


       Authority = authority, 
       RequireHttpsMetadata = false, 

       ClientId = "sampleClient", 
       //ClientSecret = "secret", 

       Scope = { "openid" , "profile" }, 

       ResponseType = "id_token token",//"code id_token",       

       SaveTokens = true 
      }); 
     }); 
+0

いいえ、appBuilderを使用していません。 –

+0

どういう意味ですか?ミドルウェアはまだ起動してはいけませんが、まだ起動していますか?ブレークポイントを追加し、何が起こっているかを確認してください。 – juunas

+0

Viewでクリックしてアクションメソッドを実行すると、デリゲートでブレークポイントがヒットしますが、そのアクションメソッドはapiで始まらず、さらにデバッグできません。そしてコードは "UseWhen"の両方の状態をチェックします。 –

関連する問題