我正在我的 .NET 6 應用程式中實作 /refresh-token 端點。控制器從標頭中獲取 JWT 令牌,對其進行解碼并發布新令牌。
角色和權限的 Itemvalue 型別為 Newtonsoft.Json.Linq.JArray。
我做得正確還是有更好的解決方案?
var handler = new JwtSecurityTokenHandler();
var oldTokenDecoded = handler.ReadJwtToken(oldToken);
List<string> rolesDecoded = new List<string>();
List<string> permissionsDecoded = new List<string>();
string UsernameDecoded = "";
string UserIDDecoded = "";
foreach(var item in oldTokenDecoded.Payload)
{
if(item.Key == "role")
{
rolesDecoded = JsonConvert.DeserializeObject<List<string>>(item.Value.ToString());
}
if(item.Key == "permissions")
{
permissionsDecoded = JsonConvert.DeserializeObject<List<string>>(item.Value.ToString());
}
if(item.Key == "Username")
{
UsernameDecoded = item.Value.ToString();
}
if(item.Key == "UserID")
{
UserIDDecoded = item.Value.ToString();
}
}
var jwtToken = JWTBearer.CreateToken(
signingKey: "token",
expireAt: DateTime.UtcNow.AddDays(1),
claims: new[] { ("Username", UsernameDecoded), ("UserID", UserIDDecoded) },
roles: rolesDecoded,
permissions: permissionsDecoded);```
uj5u.com熱心網友回復:
用于.Claims迭代宣告而不是您當前的方法:
List<string> roles = new List<string>();
List<string> permissions = new List<string>();
string username;
string userId;
foreach(var item in oldTokenDecoded.Claims)
{
switch (item.Type)
{
case "role":
roles.Add(item.Value);
break;
case "permission":
permissions.Add(item.Value);
break;
case "Username":
username = item.Value;
break;
case "UserID":
userId = item.Value;
break;
// etc
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/512534.html
上一篇:將Enum轉換為另一個Enum
下一篇:C#十進制格式僅顯示小數部分
