私は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はありませんでした。
コードには何が問題なのですか?
属性は無視されます。 Authorize属性でスキームとしてJwtを指定します。これは設定に応じて*デフォルト*です。もちろん、あなたは「デフォルト」スキームを取得します。 - それ自身で挑戦することはできないので、あなた自身でクッキー認証を使用することはできません。デフォルトのチャレンジスキームにチャレンジリクエストを渡すので、あなたの設定でJwt認証を実行し続けるでしょう。 – poke
私はcookie認証でappを持っていて、2つのメソッドに対してjwt oneを追加します。 Cookie認証方式をデフォルトに設定すると、jwt authは無視されます。 – AlexK
本当に無視されますか?それとも、あなたのデフォルトの後に実行されるのでしょうか? – CalC