我想要两种方式的身份验证,首先通过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