Поскольку вы do not have access to the internet
, вам необходимо иметь локальную идентификацию и контроль доступа, например Identity Server
, или создать собственный JWT Issuer/Validator
следующим образом:
- Получить закрытый ключ.
- Когда пользователь входит в систему, генерирует токен безопасности JWT:
private JwtSecurityToken GetJwtSecurityToken(List<Claim> user_claims)
{
string privateKey = "YOUR_PRIVATE_KEY";
var symmetricKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(privateKey));
var credentials = new SigningCredentials(symmetricKey, SecurityAlgorithms.HmacSha256);
return new JwtSecurityToken
(
issuer: "ISSUER_NAME",
audience: "AUDIENCE",
claims: user_claims,
signingCredentials: credentials
);
}
Сериализация JWT (из шага 2):
var token = new JwtSecurityTokenHandler().WriteToken(jwtToken);
Отправьте токен пользователю или добавьте его в куки.
В вашем startup file
:
services.AddAuthentication()
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, config =>
{
config.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "ISSUER",
ValidAudience = "AUDIENCE",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("YOUR_PRIVATE_KEY"))
};
});
Защитите свои контроллеры, добавив:
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
Вот и все. И, надеюсь, кто-то скажет нам, если есть какое-либо лучшее решение.
Обновление 1 (добавление ссылки):
Проверьте эту статью Защита ASP. NET Приложения Core 2.0 с JWT .