C# 在ASP.NET MVC 5中是否可以从ADFS获取登录名或电子邮件?

C# 在ASP.NET MVC 5中是否可以从ADFS获取登录名或电子邮件?,c#,asp.net-mvc,iis,adfs,C#,Asp.net Mvc,Iis,Adfs,我正在做一个项目,这将是一个登记超过企业家。我在项目中使用ASP.NET MVC 5,并通过客户的ADF进行内部验证,在广告中设置了一个组,并且只有该组的成员可以使用该应用程序,所有内容都在IIS上运行,到目前为止,一切正常 我设置的IIS使用自定义帐户和匿名身份验证 我的问题是,我想从广告中获取用户的登录名或电子邮件,这是因为客户希望不同的用户在应用程序中具有不同的访问权限,因此我需要一种方法来为每个用户获取唯一的名称/ID或其他信息。我能得到的是当前用户名,格式为“姓-名-名”,带有 我还可

我正在做一个项目,这将是一个登记超过企业家。我在项目中使用ASP.NET MVC 5,并通过客户的ADF进行内部验证,在广告中设置了一个组,并且只有该组的成员可以使用该应用程序,所有内容都在IIS上运行,到目前为止,一切正常

我设置的IIS使用自定义帐户和匿名身份验证

我的问题是,我想从广告中获取用户的登录名或电子邮件,这是因为客户希望不同的用户在应用程序中具有不同的访问权限,因此我需要一种方法来为每个用户获取唯一的名称/ID或其他信息。我能得到的是当前用户名,格式为“姓-名-名”,带有

我还可以通过获取当前组中的所有用户及其大部分信息(包括登录名和电子邮件)

我想这些只适用于Windows身份验证

我也试过了

User.Identity.Name;

我想这两个和第一个是一样的。 我也尝试了一些不同的变体,但是我得到的要么是姓氏,要么是名字,要么是用于IIS应用程序池的用户(我知道,我使用了应该返回名称的name属性,但是因为我没有找到任何其他接近的,所以我现在就使用这个属性)

当使用ADFS以这种方式登录时,如果用户已通过身份验证,或者当前用户的身份验证类型为,那么是否可能获得比名称更多的信息

我必须更改IIS中的任何内容吗


我可能错过了在这里提到的东西,在这种情况下,让我知道,否则我很高兴所有的建议,提示和一般指向任何方向

我自己设法解决了这个问题,没有什么大的意外,最大的问题是我对Active Directory工作原理的了解有限

我只是在
Identity
参数下查看

当我用

var claims = (Thread.CurrentPrincipal as System.Security.Claims.ClaimsPrincipal).Claims;
我得到了我想要的,我必须循环遍历声明并找到其中“Type”参数以“upn”结尾的一个,因为我需要在代码中的多个位置访问此信息,我在控制器中以此方法结尾:

private string GetCurrentUser()
{
    string user = "";
    var claims = (System.Threading.Thread.CurrentPrincipal as System.Security.Claims.ClaimsPrincipal).Claims;
    foreach (var claim in claims)
    {
        if(claim.Type.Substring(claim.Type.Length - 3) == "upn")
        {
            user = claim.Value;
        }
    }
    return user;
}
WindowsPrincipal.Current.Identity.Name;
User.Identity.Name;
HttpContext.User.Identity.Name;
var claims = (Thread.CurrentPrincipal as System.Security.Claims.ClaimsPrincipal).Claims;
private string GetCurrentUser()
{
    string user = "";
    var claims = (System.Threading.Thread.CurrentPrincipal as System.Security.Claims.ClaimsPrincipal).Claims;
    foreach (var claim in claims)
    {
        if(claim.Type.Substring(claim.Type.Length - 3) == "upn")
        {
            user = claim.Value;
        }
    }
    return user;
}