在ASP.net MVC .netframework 4.8应用程序中使用Cookie来维护用户身份,而在ASP.net MVC Core 6应用程序中使用Json Web Tokens(JWT)来实现身份验证和授权。因此,它们之间共享用户身份变得困难。但是,可以通过将JWT作为 .netframework 4.8应用程序中的Cookie存储或使用ASP.net Core Identity来实现共享用户身份。
以下是使用ASP.net Core Identity实现身份验证和授权的示例代码:
// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentity()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
// configure JWT token authentication
var key = Encoding.ASCII.GetBytes(Configuration.GetValue("JwtKey"));
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = false,
ValidateAudience = false
};
});
}
// controller
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public class MyController : ControllerBase
{
// controller actions
}
在ASP.net Core 6应用程序中生成JWT并在 .netframework 4.8 应用程序中读取和解析:
// ASP.net Core 6
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(Configuration.GetValue("JwtKey"));
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, username),
new Claim(ClaimTypes.Role, role)
}),
Expires = DateTime.UtcNow.AddHours(1),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
var encodedToken = tokenHandler.WriteToken(token);
// .netframework 4.8
var handler = new JwtSecurityTokenHandler();
var jwt = handler.ReadJwtToken(encodedToken);
var identity = new ClaimsIdentity(jwt.Claims);
使用此方法可以在ASP.net MVC .netframework 4.8和ASP.net MVC Core
上一篇:ASP.netMVC.core3.1如何在没有使用EntityFramework的情况下实现基于角色的身份验证?
下一篇:ASP.netMVC.netframework4.8和ASP.netMVCCore6之间共享用户身份验证无法正常工作