0

Active Federationを介して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 に答える