Jwt and Cookie Authentication



我想要两种方式的身份验证,首先通过jwt移动应用程序第二通过cookie管理员。我不明白为什么这不是工作。也许冲突。

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "some",
ValidAudience = "some",
IssuerSigningKey = signingDecodingKey.GetKey(),
};
})
.AddCookie("Admin_Scheme", options => 
{
options.LoginPath = new PathString("/Admin/Auth/Login");
});  

但是如果我注释这个:

services.AddAuthentication("Admin_Scheme")
//.AddJwtBearer(options =>
//{
//    options.TokenValidationParameters = new TokenValidationParameters
//    {
//        ValidateIssuer = true,
//        ValidateAudience = true,
//        ValidateLifetime = true,
//        ValidateIssuerSigningKey = true,
//        ValidIssuer = "MobileTLServer",
//        ValidAudience = "MobileTLClient",
//        IssuerSigningKey = signingDecodingKey.GetKey(),
//    };
//})
.AddCookie("Admin_Scheme", options => // конфигурации cookie аутентификации
{
options.LoginPath = new PathString("/Admin/Auth/Login");
});  

一切都很好。

我不明白我错在哪里了。

是我的AuthService:

//default claims
var claims = new List<Claim>
{
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim(ClaimsIdentity.DefaultNameClaimType, user.Name),
new Claim(ClaimsIdentity.DefaultRoleClaimType, "Manager"),
};
//Permissions
var permissions = await _context.PermissonRoles
.Include(pr => pr.Permission)
.Where(pr => pr.IdRole == user.Role.Id)
.Select(pr => pr.Permission)
.ToListAsync();
//Fill data
foreach (var permission in permissions)
{
claims.Add(new Claim("Permission", permission.PermissionCode));
}
var claimsIdentity = new ClaimsIdentity(claims, "Token", ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType);
await HttpContext.SignInAsync("Admin_Scheme", new ClaimsPrincipal(claimsIdentity),
new AuthenticationProperties
{
ExpiresUtc = DateTime.UtcNow.AddMinutes(60),
IsPersistent = true
});   

这个网站希望我添加更多的信息,但我不知道我能添加什么。

根据您的描述,我猜您可能没有为cookie设置授权属性AuthenticationSchemes,因为您的默认方案更改为JWT,这意味着如果您没有指定AuthenticationSchemes,它将使用JWT令牌。如果您使用cookie令牌,它将不起作用。

关于如何设置Authorize AuthenticationSchemes的更多细节,您可以参考以下代码:

[Authorize( AuthenticationSchemes = "Admin_Scheme")]
public class HomeController : Controller

相关内容

  • 没有找到相关文章

最新更新