我使用Windows身份验证创建了服务器端Blazor应用程序。然后创建了以下文件。
LoginDisplay.razor
for label in df.index:
for path, directories, files in os.walk('voxceleb1/wav_dev_files/' + label):
for file in files:
if file.endswith('.wav'):
count = count + 1
rate,signal = wavfile.read(os.path.join(path, file))
print(count)
但是,它显示“ DOMAIN \ username”。是显示用户名字的一种方法吗?
我尝试打印所有索赔类型。
<AuthorizeView>
Hello, @context.User.Identity.Name!
</AuthorizeView>
但是,只有一种带有名称的类型。 (值为@foreach(var c in context.User.Claims)
{
<p>@c.Value @c.Type</p>
}
)
DOMAIN\username
答案 0 :(得分:2)
您还可以通过目录服务(通过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>
答案 1 :(得分:0)
您必须去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中的显示方式。通常这是“最后,第一”