![](/img/trans.png)
[英]After store JWT token in cookie how to break that cookie and get information in ASP.NET Core 3.1
[英]How to get JWT token information in a Service in asp.net core api?
我想訪問令牌信息,例如服務中存儲令牌的聲明。 我嘗試在我的服務中注入AuthorizationHandlerContext
。 但是 api 無法解析AuthorizationHandlerContext
並拋出異常。 有沒有其他方法可以訪問服務內的令牌信息?
您可以將IHttpContextAccessor
注入您的服務,然后像這樣從JWT獲取所有用戶聲明或用戶信息。
IHttpContextAccessor
注冊到DI
services.AddHttpContextAccessor();
private readonly IHttpContextAccessor _httpContextAccessor;
public YourService(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
var username =_httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier)?.Value
在 OnAuthorization(IAuthorizationFilter) 操作上嘗試此代碼:
string email=context.HttpContext.User.Claims.FirstOrDefault(c => c.Type == "email").Value;
由於您要訪問 JWT 令牌信息,因此更結構化的方法是,
步驟 1. 創建 Model
public class AuthorizedUser
{
public ClaimsPrincipal Claims { get; set; }
}
步驟 2. 在您授權的 Controller 方法中使用此 model。 喜歡:
[Authorized]
[HttpPost]
public async Task<IActionResult> Modify([FromForm] RequestDto dto)
{
var user = new AuthorizedUser()
{
Claims = User
};
return Ok(await _service.MakeChanges(user, dto));
}
步驟 3. 創建一個擴展 function 以便於訪問
public static string GetUserId(this ClaimsPrincipal claims)
{
return claims.Claims.Where(c => c.Type == "sub")
.Select(c => c.Value).SingleOrDefault();
}
第 4 步。只需訪問用戶聲明和其他 JWT 屬性,例如,
public Task<object> MakeChanges(AuthorizedUser user, RequestDto dto){
var userId = user.Claims.GetUserId();
}
而已。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.