使用AAD身份验证提供程序获取当前登录的用户

时间:2019-01-22 11:59:47

标签: c# asp.net-core azure-active-directory

我有一个简单的网站,托管在Azure App Services上,在这里我按照建议的here的快速设置启用了AAD身份验证,并且它可以正常工作。

现在,我想在导航栏上显示当前登录用户的用户名/电子邮件。我该怎么办?

应用程序是使用C#Asp.Net Core 1.0.4开发的

非常感谢您

3 个答案:

答案 0 :(得分:0)

您可以使用ClaimsPrincipal来获取身份。

来自Azure Guide

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

答案 1 :(得分:0)

在您所述的简单网站中;确保您的控制器继承自Controller。

[Authorize]
public class MyController : Controller

然后只需使用

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

然后使用use userName。它将返回AD用户的登录名/电子邮件名

答案 2 :(得分:0)

您正在使用Authentication and authorization in Azure App Service

  
    

App Service通过使用特殊标头将用户声明传递给您的应用程序。不允许外部请求设置这些标头,因此仅在由App Service设置时才存在。一些示例标题包括:

  
     
      
  • X-MS-CLIENT-PRINCIPAL-NAME
  •   
  • X-MS-CLIENT-PRINCIPAL-ID
  •   
  • X-MS-令牌-AAD-ID-令牌
  •   
  • X-MS-令牌-AAD-访问令牌
  •   

引用:https://docs.microsoft.com/en-us/azure/app-service/app-service-authentication-how-to#access-user-claims

  
    

以任何语言或框架编写的代码都可以从这些标头中获取所需的信息。对于ASP.NET 4.6应用,ClaimsPrincipal会自动设置为适当的值。

         

您的应用程序还可以通过调用/.auth/me获得有关已验证用户的其他详细信息。

  

但是目前看来,ASP.NET Core不支持将身份信息从IIS模块(例如Easy Auth)流向应用程序代码。参见discussion

我目前没有对此进行测试。但是,您始终可以从标题上方获取用户名和令牌信息。如果您希望获得更多用户的声明,则可以向内置端点/.auth/me发出服务器端请求以检索声明。

您可以编写自定义中间件来填充.net Core中的User属性:

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