我有一个简单的网站,托管在Azure App Services上,在这里我按照建议的here的快速设置启用了AAD身份验证,并且它可以正常工作。
现在,我想在导航栏上显示当前登录用户的用户名/电子邮件。我该怎么办?
应用程序是使用C#Asp.Net Core 1.0.4开发的
非常感谢您
答案 0 :(得分:0)
您可以使用ClaimsPrincipal
来获取身份。
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-访问令牌
以任何语言或框架编写的代码都可以从这些标头中获取所需的信息。对于ASP.NET 4.6应用,ClaimsPrincipal会自动设置为适当的值。
您的应用程序还可以通过调用/.auth/me获得有关已验证用户的其他详细信息。
但是目前看来,ASP.NET Core不支持将身份信息从IIS模块(例如Easy Auth)流向应用程序代码。参见discussion。
我目前没有对此进行测试。但是,您始终可以从标题上方获取用户名和令牌信息。如果您希望获得更多用户的声明,则可以向内置端点/.auth/me
发出服务器端请求以检索声明。
您可以编写自定义中间件来填充.net Core中的User属性: