C#从Active Directory、IIS中的登录用户获取登录用户电子邮件地址
我正在开发一个MVC应用程序,我希望通过从Active Directory检索用户的电子邮件地址,自动将用户登录到系统中,使用该电子邮件地址在我的数据库中查找用户,如果找到,请将其登录到系统中。这样做的目的是,系统不会强制用户在登录到其在工作域/Active Directory上设置的工作站后输入登录详细信息 请在这方面帮助我,因为我已经尝试了许多线程中描述的大多数方法C#从Active Directory、IIS中的登录用户获取登录用户电子邮件地址,c#,asp.net-mvc,iis,active-directory,C#,Asp.net Mvc,Iis,Active Directory,我正在开发一个MVC应用程序,我希望通过从Active Directory检索用户的电子邮件地址,自动将用户登录到系统中,使用该电子邮件地址在我的数据库中查找用户,如果找到,请将其登录到系统中。这样做的目的是,系统不会强制用户在登录到其在工作域/Active Directory上设置的工作站后输入登录详细信息 请在这方面帮助我,因为我已经尝试了许多线程中描述的大多数方法 我已将IIS应用程序池设置为网络服务 ASP.NET模拟已禁用 我已在应用程序池->高级设置中启用加载用户配置文件 当我使
- 我已将IIS应用程序池设置为网络服务
- ASP.NET模拟已禁用李>
- 我已在应用程序池->高级设置中启用加载用户配置文件
using ( System.Web.Hosting.HostingEnvironment.Impersonate() )
{
PrincipalContext ctx = new PrincipalContext( ContextType.Domain );
UserPrincipal user = UserPrincipal.FindByIdentity( ctx, User.Identity.Name );
Response.Write( "User: " + User.Identity.Name );
Response.Write( user.EmailAddress );
Response.Flush();
Response.End();
}
错误:(&(objectCategory=user)(objectClass=user)(|(userPrincipalName=)(DifferentizedName=)(name=))搜索筛选器无效。
有人能给我指出我想要达到的目标的正确方向吗?我的要求是否有误
提前谢谢
public bool CheckUserInGroup(string group)
{
string serverName = ConfigurationManager.AppSettings["ADServer"];
string userName = ConfigurationManager.AppSettings["ADUserName"];
string password = ConfigurationManager.AppSettings["ADPassword"];
bool result = false;
SecureString securePwd = null;
if (password != null)
{
securePwd = new SecureString();
foreach (char chr in password.ToCharArray())
{
securePwd.AppendChar(chr);
}
}
try
{
ActiveDirectory adConnectGroup = new ActiveDirectory(serverName, userName, securePwd);
SearchResultEntry groupResult = adConnectGroup.GetEntryByCommonName(group);
Group grp = new Group(adConnectGroup, groupResult);
SecurityPrincipal userPrincipal = grp.Members.Find(sp => sp.SAMAccountName.ToLower() == User.Identity.Name.ToLower());
if (userPrincipal != null)
{
result = true;
}
}
catch
{
result = false;
}
return result;
}
我相信有很多方法可以从C#MVC中检索广告用户。请使用GalacticAPI(免费开源软件包)看看这个好例子 要让用户自动登录,您需要使用Windows身份验证。要实现这一点,有几个先决条件:
网络。协商身份验证。可信URI
标记下:
并将其添加到
下:
然后,只要浏览器信任您的网站(上面的步骤2),您就会自动登录。登录用户的用户名将是
user.Identity.Name
。您显示的所有代码都可以工作,但是您不需要调用System.Web.Hosting.HostingEnvironment.Impersonate()
我不想指定连接到Active Directory的用户名和密码。我想获取当前登录到给定工作站的用户的配置电子邮件地址。然后使用该电子邮件地址/用户名在我的数据库中查找用户。Hi@Morgs,用于连接active directory的用户名和密码。您可以尝试要求网络人员为您的系统创建特定凭据。或者你可以看看这个。如果您在{上设置断点,User.Identity.Name
的值是多少?@briansays>该值为空…在这里有相同的想法和相同的问题。我有一个问题理解为什么用户需要“重新登录”在经过身份验证后,从AD检索他自己的信息。请更新此线程。注意:我有一个通过LDAP的替代登录,在那里我可以获取所有用户信息(姓名、姓氏、电话、电子邮件、组等)。为什么我不能从IIS获取?