public static class ServiceExtensions
public async static TasK T GetJsonAsync T (this HttpClient httpClient, string url)
var token =
var request = new HttpRequestMessage(HttpMethod.Get, url)
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token)
var response = await httpClient.SendAsync(request)
var responseBytes = await response.Content.ReadAsByteArrayAsync()
return JsonSerializer.Deserialize T (responseBytes,
new JsonSerializerOptions PropertyNamingPolicy = JsonNamingPolicy.CamelCase
--------
اسف اجبرت لنزع بعض الرمزو
public async override Task AuthenticationState GetAuthenticationStateAsync()
var token = Convert.ToString(await _StorageService.GetStorage(ServiceConsts.STORAGE_TYPE.Local, ServiceConsts.STORAGE_TOKEN));
ClaimsPrincipal authenticatedUser;
if (token != null)
authenticatedUser = new ClaimsPrincipal(new ClaimsIdentity(ParseClaimsFromJwt(token), ServiceConsts.USER_AUTHENTICATION));
else
var identity = new ClaimsIdentity(new[] {new Claim(ClaimTypes.Name,ServiceConsts.USER_ANONYMOUS ),new Claim(ClaimTypes.Role,ServiceConsts.USER_ANONYMOUS )
, ServiceConsts.USER_AUTHENTICATION);
authenticatedUser = new ClaimsPrincipal(identity)
return await Task.FromResult(new AuthenticationState(authenticatedUser));
public static IEnumerable Claim ParseClaimsFromJwt(string jwt)
var claims = new List Claim();
var payload = jwt.Split('.')[1];
var jsonBytes = ParseBase64WithoutPadding(payload);
var keyValuePairs = JsonSerializer.Deserialize Dictionary string, object (jsonBytes);
ExtractRolesFromJWT(claims, keyValuePairs);
claims.AddRange(keyValuePairs.Select(kvp = new Claim(kvp.Key, kvp.Value.ToString())));
return claims
private static byte[] ParseBase64WithoutPadding(string payload)
payload = payload.Replace('-', '+').Replace('_', '/');
var base64 = payload.PadRight(payload.Length + (4 - payload.Length % 4) % 4, '=');
return Convert.FromBase64String(base64);
private static void ExtractRolesFromJWT(List Claim claims, Dictionary string, object keyValuePairs)
keyValuePairs.TryGetValue(ClaimTypes.Role, out object roles);
if (roles != null)
var parsedRoles = roles.ToString().Trim().TrimStart('[').TrimEnd(']').Split(',');
if (parsedRoles.Length 1)
foreach (var parsedRole in parsedRoles)
claims.Add(new Claim(ClaimTypes.Role, parsedRole.Trim('"')));
else
claims.Add(new Claim(ClaimTypes.Role, parsedRoles[0]));
keyValuePairs.Remove(ClaimTypes.Role);