using System; using System.Collections.Generic; using System.Linq; using System.Security.Claims; using System.Security.Principal; using System.Text; using System.Threading.Tasks; namespace CloudBuilder.Core.Extensions { /// /// 扩展操作类 /// public static class ClaimsIdentityExtensions { /// /// 获取指定类型的Claim值 /// public static string GetClaimValueFirstOrDefault(this IIdentity identity, string type) { if (!(identity is ClaimsIdentity claimsIdentity)) { return null; } return claimsIdentity.FindFirst(type)?.Value; } /// /// 获取指定类型的所有Claim值 /// public static string[] GetClaimValues(this IIdentity identity, string type) { if (!(identity is ClaimsIdentity claimsIdentity)) { return null; } return claimsIdentity.Claims.Where(m => m.Type == type).Select(m => m.Value).ToArray(); } /// /// 获取用户ID /// public static T GetUserId(this IIdentity identity) { if (!(identity is ClaimsIdentity claimsIdentity)) { return default(T); } string value = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier)?.Value; if (value == null) { return default(T); } return value.CastTo(); } /// /// 获取用户ID /// public static string GetUserId(this IIdentity identity) { if (!(identity is ClaimsIdentity claimsIdentity)) { return null; } return claimsIdentity.FindFirst(ClaimTypes.NameIdentifier)?.Value; } /// /// 获取用户名 /// public static string GetUserName(this IIdentity identity) { if (!(identity is ClaimsIdentity claimsIdentity)) { return null; } return claimsIdentity.FindFirst(ClaimTypes.Name)?.Value; } /// /// 获取Email /// public static string GetEmail(this IIdentity identity) { if (!(identity is ClaimsIdentity claimsIdentity)) { return null; } return claimsIdentity.FindFirst(ClaimTypes.Email)?.Value; } /// /// 获取昵称 /// public static string GetNickName(this IIdentity identity) { if (!(identity is ClaimsIdentity claimsIdentity)) { return null; } return claimsIdentity.FindFirst(ClaimTypes.GivenName)?.Value; } /// /// 移除指定类型的声明 /// public static void RemoveClaim(this IIdentity identity, string claimType) { if (!(identity is ClaimsIdentity claimsIdentity)) { return; } Claim claim = claimsIdentity.FindFirst(claimType); if (claim == null) { return; } claimsIdentity.RemoveClaim(claim); } /// /// 获取所有角色 /// public static string[] GetRoles(this IIdentity identity) { if (!(identity is ClaimsIdentity claimsIdentity)) { return new string[0]; } return claimsIdentity.FindAll(ClaimTypes.Role).SelectMany(m => { string[] roles = m.Value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); return roles; }).ToArray(); } } }