Я успешно подключил систему авторизации на основе токенов между интерфейсным веб-приложением Angular и внутренним интерфейсом .Net Core Web API (для получения данных).
Теперь я хочу объединить JWTЛогика (создание и проверка) в третьем веб-API .Net Core Project.
Как «переместить» следующую логику в отдельный веб-API для проверки токена?
ВStartup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidateIssuer = true,
ValidateAudience = true,
ValidAudiences = new List<string> { "Audience1", "Audience2" },
ValidIssuer = "Credit Card oAuth Web API",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("superSecretKey@345"))
};
}); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
И в контроллере:
[Authorize (Roles = "Credit Card Administrator")]
public ActionResult<string> Get(int id)
{
return "value";
}
Я хочу сохранить логику для ролей (которая работает из-заутверждает, что в JWT это делается так:
var userClaims = new List<Claim>()
{
new Claim(JwtRegisteredClaimNames.Sub, name),
new Claim(JwtRegisteredClaimNames.Email, "user.name@company.com"),
new Claim(JwtRegisteredClaimNames.GivenName, "User Name"),
new Claim(ClaimTypes.Role, "Customer Administrator"),
new Claim(ClaimTypes.Role, "Credit Card Administrator"),
new Claim(ClaimTypes.Role, "Counter Administrator")
};
// TODO: Refactor The Following: Get token from oAuth Service (pass in Audience and Claims)
var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("superSecretKey@345"));
var signinCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256);
var tokenOptions = new JwtSecurityToken(
issuer: "http://localhost:58726",
audience: "http://localhost:58726",
claims: userClaims,
expires: DateTime.Now.AddMinutes(20),
signingCredentials: signinCredentials
);
var tokenString = new JwtSecurityTokenHandler().WriteToken(tokenOptions);
Я надеюсь, что это имеет смысл, и любая помощь приветствуется.