簡體   English   中英

ClaimsPrincipal 在 ASP .Net 核心 MVC Web 應用程序中不起作用

[英]ClaimsPrincipal does not work in ASP .Net core MVC web app

當用戶登錄我的應用程序時,我需要從聲明中獲取租戶 ID。 這完全適用於 ASP .Net 4.7 Mvc 應用程序。 但它在 asp .net core mvc app (3.1) 中不起作用。

var tenantId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value; 

它不斷收到“對象引用未設置為對象的實例”這個錯誤。

對於 .Net Core 3.1 put,使用 System.IdentityModel.Tokens.Jwt;

對於控制器:

var token = HttpContext.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last();
var tokenClaims = new JwtSecurityToken(token.Replace("Bearer ", string.Empty));
var oid = tokenClaims.Payload["oid"].ToString();

對於 SignalRHub OnConnectedAsync():

var token = new JwtSecurityToken(Context.User.Identities.FirstOrDefault(x => x.IsAuthenticated).BootstrapContext.ToString());
var oid = token.Claims.FirstOrDefault(m => m.Type == "oid").Value;

ClaimsPrincipal.Current 未在 ASP.NET Core 中設置。 相反,它使用依賴注入來提供依賴,例如當前用戶的身份。

有幾個選項可用於檢索當前經過身份驗證的用戶的 ClaimsPrincipal:

  • ControllerBase.User(MVC 控制器)
  • HttpContext.User(中間件)
  • 從調用者傳入(無法訪問 HttpContext 的庫)
  • IHttpContextAccessor(當過多地傳遞用戶身份時)

您可以在文檔頁面上找到有關此主題的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM