如何从@context.User获取用户的名字或姓氏?
How to get user's first name or last name from @context.User?
我使用 Windows 身份验证创建了服务器端 Blazor 应用程序。它创建了以下文件。
LoginDisplay.razor
<AuthorizeView>
Hello, @context.User.Identity.Name!
</AuthorizeView>
然而,它显示"DOMAIN\username"。这是一种显示用户名字的方法吗?
我尝试打印所有索赔类型。
@foreach(var c in context.User.Claims)
{
<p>@c.Value @c.Type</p>
}
但是,只有一种类型有名称。 (值为 DOMAIN\username
)
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
你必须去 AD 才能获得该信息。但是在 ASP.NET Core 中连接到 AD 并不简单。
如果您只打算在 Windows 服务器上 运行 这个,那么您可以从 NuGet 安装 Microsoft.Windows.Compatibility
,然后使用 DirectoryEntry
直接绑定到对象使用其 SID。 SID 在 context.User.Identity.User.Value
.
中可用
<AuthorizeView>
@{
var identity = (WindowsIdentity) context.User.Identity;
var user = new DirectoryEntry($"LDAP://<SID={identity.User.Value}>");
//Add any other attributes you want to read to this list
user.RefreshCache(new [] { "givenName" });
}
Hello, @user.Properties["givenName"].Value!
</AuthorizeView>
您可能感兴趣的其他属性:
sn
: 姓
displayName
:例如,他们的姓名在 Outlook 中的显示方式。通常这是 "Last, First"
您也可以通过目录服务(使用 NuGet 安装)按如下方式使用它。
_Imports.razor
@using System.DirectoryServices.AccountManagement
LoginDisplay.razor
<AuthorizeView>
@{
var pcontext = new PrincipalContext(ContextType.Domain, "XYZ.net", "DC=XYZ,DC=net");
var principal = UserPrincipal.FindByIdentity(pcontext, context.User.Identity.Name);
}
Hello, @principal.GivenName @principal.Surname!
</AuthorizeView>
我使用 Windows 身份验证创建了服务器端 Blazor 应用程序。它创建了以下文件。
LoginDisplay.razor
<AuthorizeView>
Hello, @context.User.Identity.Name!
</AuthorizeView>
然而,它显示"DOMAIN\username"。这是一种显示用户名字的方法吗?
我尝试打印所有索赔类型。
@foreach(var c in context.User.Claims)
{
<p>@c.Value @c.Type</p>
}
但是,只有一种类型有名称。 (值为 DOMAIN\username
)
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name
你必须去 AD 才能获得该信息。但是在 ASP.NET Core 中连接到 AD 并不简单。
如果您只打算在 Windows 服务器上 运行 这个,那么您可以从 NuGet 安装 Microsoft.Windows.Compatibility
,然后使用 DirectoryEntry
直接绑定到对象使用其 SID。 SID 在 context.User.Identity.User.Value
.
<AuthorizeView>
@{
var identity = (WindowsIdentity) context.User.Identity;
var user = new DirectoryEntry($"LDAP://<SID={identity.User.Value}>");
//Add any other attributes you want to read to this list
user.RefreshCache(new [] { "givenName" });
}
Hello, @user.Properties["givenName"].Value!
</AuthorizeView>
您可能感兴趣的其他属性:
sn
: 姓displayName
:例如,他们的姓名在 Outlook 中的显示方式。通常这是 "Last, First"
您也可以通过目录服务(使用 NuGet 安装)按如下方式使用它。
_Imports.razor
@using System.DirectoryServices.AccountManagement
LoginDisplay.razor
<AuthorizeView>
@{
var pcontext = new PrincipalContext(ContextType.Domain, "XYZ.net", "DC=XYZ,DC=net");
var principal = UserPrincipal.FindByIdentity(pcontext, context.User.Identity.Name);
}
Hello, @principal.GivenName @principal.Surname!
</AuthorizeView>