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
	 Shaun Walker
					Shaun Walker