2017-12-20 10 views
0

私はcookieとjwt authスキームを持つアプリを持っています。これはConfigureServicesコードです:asp.net core 2.0は特定のスキームで承認します

var authTokenSettings = configuration.GetSection(nameof(TokenProviderSettings)).Get<TokenProviderSettings>(); 

services.AddAuthentication(options => 
{ 
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; 
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; 
}) 
.AddCookie(authSection.AuthenticationScheme, u => 
{ 
    u.Cookie.Name = authSection.AuthCookieName; 
    u.LoginPath = new PathString(authSection.LoginPath); 
    u.AccessDeniedPath = "/Home/Index"; 
}) 
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options => 
{ 
    options.RequireHttpsMetadata = false; 
    options.TokenValidationParameters = new TokenValidationParameters 
    { 
     ValidateIssuer = true, 
     ValidIssuer = authTokenSettings.Issuer, 
     ValidateAudience = true, 
     ValidAudience = authTokenSettings.Audience, 
     ValidateLifetime = true, 
     IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(authTokenSettings.Key)), 
     ValidateIssuerSigningKey = true, 
    }; 
}); 

は今、私は他の上の一つの方法とJWTにクッキースキームを使用する必要があります。適切な属性を追加しました

([Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]) 

しかし、これらの属性は無視され、デフォルトのスキームが使用されます。私は、デフォルトのスキームを指定しない場合、私はこの例外を取得:

のSystem.InvalidOperationException:いいえauthenticationSchemeは、指定 で、見つかりませDefaultChallengeSchemeはありませんでした。

コードには何が問題なのですか?

+0

属性は無視されます。 Authorize属性でスキームとしてJwtを指定します。これは設定に応じて*デフォルト*です。もちろん、あなたは「デフォルト」スキームを取得します。 - それ自身で挑戦することはできないので、あなた自身でクッキー認証を使用することはできません。デフォルトのチャレンジスキームにチャレンジリクエストを渡すので、あなたの設定でJwt認証を実行し続けるでしょう。 – poke

+0

私はcookie認証でappを持っていて、2つのメソッドに対してjwt oneを追加します。 Cookie認証方式をデフォルトに設定すると、jwt authは無視されます。 – AlexK

+0

本当に無視されますか?それとも、あなたのデフォルトの後に実行されるのでしょうか? – CalC

答えて

0

私はこの問題を解決しました。属性[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]は、アクションにではなく、コントローラに追加された場合にのみ認証方式を定義します。

+0

私はそれが本当だとは思わない。私はあなたがコントローラレベルで1つを持っているのではなく、特定のアクションを「オーバーライド」しようとするのではなく、「混在」コントローラの各アクションに '[Authorize]'属性を持たなければならないと思います。 – CalC

+0

私はそれを試しましたが、上記の問題に直面しました。そして、コントローラを2つに分割してそれぞれに属性を追加したとき – AlexK

関連する問題