在发布到Azure之前和之后,User.Identity.Name是不同的

时间:2017-02-24 23:33:21

标签: asp.net-mvc azure azure-active-directory

我在我的Asp.net mvc web应用程序中使用@ User.Identity.Name。一旦部署,这将在本地上显示为Domain \ user,在Azure上显示为user@domain.com。而不是使用@ User.Identity.Name,有没有办法使它在本地和服务器上唯一。由于这种冲突,我有许多代码破坏区域。

我将Azure Active Directory身份验证添加到Azure上托管的应用程序。

using (var context = new PrincipalContext(ContextType.Domain))
{
   var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
   var displayName = principal?.DisplayName;
}

此displayName显示在本地,一旦发布到Azure,它就像null“”。一旦发布,在Azure服务器上显示显示名称的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

您似乎正在将AD库用于传统的内部部署AD。若要针对Azure AD进行编程,可以使用OpenID Connect对Azure AD租户中的用户进行身份验证。请参阅下面的代码示例:

https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect

要获取当前用户的显示名称,您可以尝试:

var displayName = ((System.Security.Claims.ClaimsIdentity)User.Identity).Claims.Where(c => c.Type == "name").FirstOrDefault().Value;

如果您还想在使用Azure AD时显示Domain \ DisplayName,则可以通过以下方式获取域名:

var domian= ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn).Value.Split('@')[1].ToString();