2012-06-21 4 views
0

Я пытаюсь выполнить аутентификацию на сервере ADFS через активную федерацию, но перед попыткой аутентификации пользователя необходимо преобразовать входящее имя пользователя по запросу AD/LDAP.Преобразование входящего имени пользователя в ADFS при активной аутентификации

Я использую конечную точку UsernameMixed с UserNameWSTrustBinding:

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); 

Моя проблема, я хочу, чтобы преобразовать «имя пользователя», переданный в endpoing на адрес электронной почты пользователя (через AD или LDAP) на сервер ADFS перед запуском проверки подлинности. Возможно ли это сделать?

+0

сценарий не имеет смысла для меня, как я понимаю, в сочетании с тем, как я понимаю, «Active» аутентификация с ADFS (или любой STS). Если ваше приложение-доверенное лицо имеет доступ к серверу AD, на котором будут появляться ВСЕ ваши пользователи, то почему вы вообще беспокоитесь о федерации или ADFS? Почему бы просто не настроить приложение для интегрированной (оконной) аутентификации? Если вам нужно запросить AD, чтобы получить какое-либо значение (что-либо вообще), то все преимущества федеративной аутентификации полностью недействительны. – ctb

ответ

0

Насколько я знаю, на сервере AD FS нет простого способа преобразовать входящее имя пользователя перед выполнением проверки подлинности. Преобразования выполняются исходящими запросами после того, как аутентификация уже произошла.

Для получения этой информации вам, возможно, потребуется запросить AD/LDAP в приложении, использующем эту заявку. Сделайте что-то вроде этого (взято из here):

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()); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^