Я использую в своем проекте jwt токены. Код для создания ClaimsIdentity:
public async Task<ClaimsIdentity> GetClaimsIdentityAsync(User user)
{
var roles = await _roleService.GetUserRolesAsync(user);
var claims = new List<Claim>
{
new Claim(ClaimsIdentity.DefaultNameClaimType, user.Username),
};
foreach (var role in roles)
{
claims.Add(new Claim(ClaimsIdentity.DefaultRoleClaimType, role.Name));
}
ClaimsIdentity claimsIdentity =
new ClaimsIdentity(claims, "Token", ClaimsIdentity.DefaultNameClaimType,
ClaimsIdentity.DefaultRoleClaimType);
return claimsIdentity;
}
Код для создания токена:
public async Task<string> GetJwtToken(User user)
{
var identity = await _sinInService.GetClaimsIdentityAsync(user);
var now = DateTime.UtcNow;
var jwt = new JwtSecurityToken(
issuer: AuthOptions.ISSUER,
audience: AuthOptions.AUDIENCE,
notBefore: now,
claims: identity.Claims,
expires: now.Add(TimeSpan.FromMinutes(AuthOptions.LIFETIME)),
signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(), SecurityAlgorithms.HmacSha256));
return new JwtSecurityTokenHandler().WriteToken(jwt);
}
Код в классе Startup:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = AuthOptions.ISSUER,
ValidateAudience = true,
ValidAudience = AuthOptions.AUDIENCE,
ValidateLifetime = true,
IssuerSigningKey = AuthOptions.GetSymmetricSecurityKey(),
ValidateIssuerSigningKey = true,
};
});
Код был взят из этой статьи: https://metanit.com/sharp/aspnet5/23.7.php
Получив строку токена можно авторизоваться с любого браузера или устройства. Как сделать так, чтобы токен был валидным только при использовании его с устройством, ip адресом и браузером, с которых была произведена авторизация?
Сервер знает о клиенте только то, что клиент прислал ему в http-запросе.
По сути, это только:
Так что ответ - провалидировать привязку токена к девайсу не получится.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости