簡體   English   中英

使用AAD身份驗證提供程序獲取當前登錄的用戶

[英]Get current logged user with AAD authentication provider

我有一個簡單的網站,托管在Azure App Services上,在這里我按照此處建議的快速設置啟用了AAD身份驗證並且它可以正常工作。

現在,我想在導航欄上顯示當前登錄用戶的用戶名/電子郵件。 我應該怎么做?

應用程序是用C#Asp.Net Core 1.0.4開發的

非常感謝你

您可以使用ClaimsPrincipal來獲取身份。

來自Azure指南

 Claim displayName = ClaimsPrincipal.Current.FindFirst(ClaimsPrincipal.Current.Identities.First().NameClaimType);
ViewBag.DisplayName = displayName != null ? displayName.Value : string.Empty;

在您所說的簡單網站中; 確保您的控制器繼承自Controller。

[Authorize]
public class MyController : Controller

然后簡單地使用

protected string userName => User?.Identity?.Name ?? "Unnamed User";  

然后使用use userName。 它將返回AD用戶的登錄名/電子郵件名

您正在使用Azure App Service中的身份驗證和授權

App Service通過使用特殊標頭將用戶聲明傳遞給您的應用程序。 不允許外部請求設置這些標頭,因此僅在由App Service設置時才存在。 標頭示例包括:

  • X-MS-CLIENT主體名稱
  • X-MS-CLIENT-委托ID
  • X-MS-TOKEN-AAD-ID-TOKEN
  • X-MS-TOKEN-AAD-ACCESS-TOKEN

參考: https : //docs.microsoft.com/zh-cn/azure/app-service/app-service-authentication-how-to#access-user-claims

用任何語言或框架編寫的代碼都可以從這些標頭中獲取所需的信息。 對於ASP.NET 4.6應用程序,ClaimsPrincipal將自動設置為適當的值。

您的應用程序還可以通過調用/.auth/me獲得有關已認證用戶的其他詳細信息。

但是目前看來,ASP.NET Core不支持將身份信息從IIS模塊(例如Easy Auth)流向應用程序代碼。 請參閱此處的討論

我目前還沒有測試。 但是,您始終可以從標題上方獲取用戶名和令牌信息。 如果要獲取更多用戶的聲明,可以向內置端點/.auth/me發出服務器端請求以檢索聲明。

您可以編寫自定義中間件來填充.net Core中的User屬性:

https://stackoverflow.com/a/42270669/5751404

暫無
暫無

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

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