remote service support via Jwt
This commit is contained in:
@ -10,20 +10,19 @@ namespace Oqtane.Security
|
||||
{
|
||||
public interface IJwtManager
|
||||
{
|
||||
string GenerateToken(Alias alias, User user, string secret, string issuer, string audience, int lifetime);
|
||||
string GenerateToken(Alias alias, ClaimsIdentity user, string secret, string issuer, string audience, int lifetime);
|
||||
User ValidateToken(string token, string secret, string issuer, string audience);
|
||||
}
|
||||
|
||||
public class JwtManager : IJwtManager
|
||||
{
|
||||
public string GenerateToken(Alias alias, User user, string secret, string issuer, string audience, int lifetime)
|
||||
public string GenerateToken(Alias alias, ClaimsIdentity user, string secret, string issuer, string audience, int lifetime)
|
||||
{
|
||||
var tokenHandler = new JwtSecurityTokenHandler();
|
||||
var key = Encoding.ASCII.GetBytes(secret);
|
||||
var identity = UserSecurity.CreateClaimsIdentity(alias, user);
|
||||
var tokenDescriptor = new SecurityTokenDescriptor
|
||||
{
|
||||
Subject = new ClaimsIdentity(identity),
|
||||
Subject = new ClaimsIdentity(user),
|
||||
Issuer = issuer,
|
||||
Audience = audience,
|
||||
Expires = DateTime.UtcNow.AddMinutes(lifetime),
|
||||
@ -56,7 +55,7 @@ namespace Oqtane.Security
|
||||
var jwtToken = (JwtSecurityToken)validatedToken;
|
||||
var user = new User
|
||||
{
|
||||
UserId = int.Parse(jwtToken.Claims.FirstOrDefault(item => item.Type == "id")?.Value),
|
||||
UserId = int.Parse(jwtToken.Claims.FirstOrDefault(item => item.Type == "nameid")?.Value),
|
||||
Username = jwtToken.Claims.FirstOrDefault(item => item.Type == "name")?.Value
|
||||
};
|
||||
return user;
|
||||
|
@ -28,7 +28,7 @@ namespace Oqtane.Security
|
||||
var claims = context.Principal.Claims;
|
||||
|
||||
// check if principal has roles and matches current site
|
||||
if (!claims.Any(item => item.Type == ClaimTypes.Role) || claims.FirstOrDefault(item => item.Type == ClaimTypes.GroupSid)?.Value != alias.SiteKey)
|
||||
if (!claims.Any(item => item.Type == ClaimTypes.Role) || claims.FirstOrDefault(item => item.Type == "sitekey")?.Value != alias.SiteKey)
|
||||
{
|
||||
var userRepository = context.HttpContext.RequestServices.GetService(typeof(IUserRepository)) as IUserRepository;
|
||||
var userRoleRepository = context.HttpContext.RequestServices.GetService(typeof(IUserRoleRepository)) as IUserRoleRepository;
|
||||
|
@ -49,9 +49,9 @@ namespace Oqtane.Security
|
||||
if (user.IsAuthenticated)
|
||||
{
|
||||
user.Username = principal.Identity.Name;
|
||||
if (principal.Claims.Any(item => item.Type == ClaimTypes.PrimarySid))
|
||||
if (principal.Claims.Any(item => item.Type == ClaimTypes.NameIdentifier))
|
||||
{
|
||||
user.UserId = int.Parse(principal.Claims.First(item => item.Type == ClaimTypes.PrimarySid).Value);
|
||||
user.UserId = int.Parse(principal.Claims.First(item => item.Type == ClaimTypes.NameIdentifier).Value);
|
||||
}
|
||||
foreach (var claim in principal.Claims.Where(item => item.Type == ClaimTypes.Role))
|
||||
{
|
||||
|
Reference in New Issue
Block a user