公司內部的 IdentityServer 所輸出的人員名稱是放在 token 中的 name 這個欄位,但是從 dotnet 7 開始,Jwt 的解析就有一些更新,這邊紀錄一些資料。
雖然 .net 在 httpContext 中可以取得使用者資訊,但是僅限能被 token handler 解析配對資料的部分才會被設定到 httpContext.User.Identity 之中,其他資料可以用以下方式取得
但是這是自己去抓 token 內的欄位,我個人比較偏好利用 .net 原生的處理模式取得人員資料,也就是利用 httpContext.User.Identity 來去取得相關資訊,因此有了後續章節的設定。
在 .net 7 中,預設解析 jwt 的處理器是 JwtSecurityTokenHandler ,而 Token 中欄位的預設配對設定放在 DefaultInboundClaimTypeMap 這個屬性裡面,因此,只需要在這個屬性 (它是 IDictionary<string, string> ) 內埔上要配對的資訊即可。
程式碼範例:
在 dotnet 8 中,JwtBearer 的預設處理工具改變,由預設 JwtSecurityTokenHandler 改為 JsonWebTokenHandler,並且在 Options 中新增了 UseSecurityTokenValidators 這個屬性,當這個屬性為 true 時,才會使用 JwtSecurityTokenHandler 處理。
JwtBearerOptions.UseSecurityTokenValidators Property 說明
此欄位下的說明表示,JsonWebTokenHandler 比 JwtSecurityTokenHandler 快,所以預設改用 JsonWebTokenHandler
因此,處理方式有以下幾種