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