Чтобы подготовить мое приложение к использованию ADFS, мне нужно работать с федерацией . Теперь у нас есть решение с сервером с федеративными услугами, использующим WIF для обеспечения безопасности, у которого есть клиент, потребляющий эти услуги, и у нас есть и STS, где был введен пароль пользователя для идентификации пользователя.WIF, Federation и STS
Все работает нормально, все мои требования генерируются правильно, и я могу использовать их в своем приложении.
Теперь мы должны использовать ADFS в дополнение к нашему внутреннему IdentityProvider, я бы просто взял мои sts и разделил его между двумя частями, «провайдером федерации», вызванным клиентом и доверенным сервером, и частью, ответственной за аутентификацию Для этого я просто добавить следующий код в моем CustomSecurityTokenHandler в FederationProvider
UserNameSecurityToken userNameTokenFromRP = token as UserNameSecurityToken;
WSTrustChannelFactory stsClient = new WSTrustChannelFactory("IdentityConfiguration");
stsClient.Credentials.UserName.UserName = userNameTokenFromRP.UserName;
stsClient.Credentials.UserName.Password = userNameTokenFromRP.Password;
IWSTrustChannelContract stsProxy = stsClient.CreateChannel();
RequestSecurityToken rst = new RequestSecurityToken(WSTrust13Constants.RequestTypes.Issue, WSTrust13Constants.KeyTypes.Symmetric);
rst.AppliesTo = new System.ServiceModel.EndpointAddress("http://localhost:8010/FederationProvider.svc");
rst.Claims.Add(new RequestClaim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", false));
rst.Issuer = new System.ServiceModel.EndpointAddress("http://localhost:8020/IdentityProvider.svc");
rst.Lifetime = new Lifetime(DateTime.Now, DateTime.Now + new TimeSpan(0, 30, 0));
rst.TokenType = Microsoft.IdentityModel.Tokens.SecurityTokenTypes.OasisWssSaml11TokenProfile11;
RequestSecurityTokenResponse rstr;
var stsToken = stsProxy.Issue(rst, out rstr);
и это в моем файле web.config:
<client>
<endpoint name="IdentityConfiguration" address="http://localhost:8020/IdentityProvider.svc"
binding="ws2007HttpBinding" bindingConfiguration="SecurityTokenBinding"
contract="Microsoft.IdentityModel.Protocols.WSTrust.IWSTrustChannelContract">
<identity>
<certificate encodedValue="MyEncodedValue" />
</identity>
</endpoint>
</client>
на стороне идентичности я по-прежнему генерировать мои претензии так же, как я быть fore Проблема у меня есть в моем RSTR токен равен null, а tokenXML зашифрован, я не понимаю, как использовать федерацию в этом случае?
Если кто-то может мне помочь?
спасибо за чтение мне
Ange