0

我正在尝试通过活动联合对 ADFS 服务器进行身份验证,但在尝试对用户进行身份验证之前,需要通过 AD/LDAP 查询转换传入的用户名。

我正在使用带有 UserNameWSTrustBinding 的 UsernameMixed 端点:

WSTrustChannelFactory factory = new WSTrustChannelFactory(new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential), "https://nobody.com/adfs/services/trust/13/UsernameMixed");          

factory.TrustVersion = TrustVersion.WSTrust13;
factory.Credentials.UserName.UserName = userName;
factory.Credentials.UserName.Password = password;

IWSTrustChannelContract channel = factory.CreateChannel();
RequestSecurityToken rst = new RequestSecurityToken(RequestTypes.Issue, WSTrust13Constants.KeyTypes.Bearer);
SecurityToken token = channel.Issue(rst);

我的问题是,我想在运行身份验证之前将传递给端点的“用户名”转换为 ADFS 服务器上的用户电子邮件地址(通过 AD 或 LDAP)。这可能吗?

4

1 回答 1

0

据我所知,AD FS 服务器上没有简单的方法可以在进行身份验证之前转换传入的用户名。在身份验证已经发生后,对传出声明进行转换。

您可能需要在您的依赖方应用程序中查询 AD/LDAP 以获取此信息。做这样的事情(取自这里):

string domain = "YourDomain";

List<string> emailAddresses = new List<string>();

PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, domain);
UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, userName);

// Add the "mail" entry
emailAddresses.Add(user.EmailAddress);

// Add the "proxyaddresses" entries.
PropertyCollection properties = ((DirectoryEntry)user.GetUnderlyingObject()).Properties;
foreach (object property in properties["proxyaddresses"])
{
   emailAddresses.Add(property.ToString());
}
于 2012-07-18T16:33:44.030 回答