Asp.net 在MVC 5中获取登录用户GUID

Asp.net 在MVC 5中获取登录用户GUID,asp.net,asp.net-mvc,asp.net-mvc-5,membership-provider,Asp.net,Asp.net Mvc,Asp.net Mvc 5,Membership Provider,我正在开发一个ASP.NET MVC 5 web应用程序,并对LDAP服务器使用表单身份验证 以下是登录操作方法:- [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult Login(LoginModel model, string returnUrl) { MembershipProvider domainProvider; domainProvider = Membership.P

我正在开发一个ASP.NET MVC 5 web应用程序,并对LDAP服务器使用表单身份验证

以下是登录操作方法:-

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
    MembershipProvider domainProvider;
    domainProvider = Membership.Providers["ADMembershipProvider"];
    if (ModelState.IsValid)
以及连接到LDAP的
web.config
文件中的相关实体:

<providers>
<add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=4.0.0.0, &#xA;   Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="TestDomain1ConnectionString" connectionUsername="ad.user" connectionPassword="***" attributeMapUsername="sAMAccountName"/>
</providers>

<connectionStrings>
<add name="TestDomain1ConnectionString" connectionString="LDAP://ad-Tgroup.intra/OU=T,DC=ad-Tgroup,DC=intra"/>
</connectionStrings>

使用
User.Identity.Name
可能在几乎95%的情况下都有效,因为它可以唯一地识别任何用户,但另一方面,用户名可能会更改(比如说用户结婚或离婚)。因此,我计划替换我的
User.Identity.Name
,取而代之的是获取用户GUID。但我不确定MVC5是否提供了获取登录用户GUID的方法。例如,我无法写入
User.Identity.GUID

正确,您将无法直接从主体访问GUID。但是,虽然
User.Identity.Name
作为一个持久id可能不够唯一,但它现在足够唯一,可以查询LDAP源以获取您可能需要的任何其他信息,例如GUID。是的,您是正确的。但我也在自己的数据库中管理SecurityRole。目前在securityrole表中,我为每行存储两个值;securityroleID+用户名(以下格式为domainname\UserName)。正如我提到的,它在我们公司运作良好。但假设将来我们更改了用户名,并且该用户尝试访问系统并执行一些操作…然后他将收到一个错误,因为他的新用户名不再在安全组中。但是,如果我将GUID存储在SecurityRole表中,并获取登录用户的GUID,那么在更改用户名时就不会有任何问题。现在,我可以通过查询AD来检索登录用户GUID,,,但我担心,当用户执行某个操作时,我需要查询AD的GUID,,,你认为如何?为什么不将AD GUID存储在本地,然后创建一个声明和扩展方法来访问该声明?你的确切意思是什么?我正在对ldap服务器使用Membership.Providers,我没有使用声明
string ADusername = User.Identity.Name.ToString();
repository.InsertOrUpdateResturant(resturant, ADusername);