я пытаю следующее:вызова службы WCF с выданный маркер
- ФОС клиент вызывает STS и получает SAML утверждение
- клиент вызывает службу, используя утверждение SAML
Теперь я реализовали сценарий выше в виде трех сценариев LinqPad: client.linq
, sts.linq
(самообслуживаемая служба WCF) и service.linq
(самообслуживаемая служба WCF). Все они могут быть найдены по адресу: https://github.com/codeape2/WCF_STS
Мне нужна помощь, чтобы это работало.
Используя следующий код в client.linq
, я могу назвать моим STS и получить SAML утверждение:
SecurityToken GetToken()
{
var binding = new BasicHttpBinding();
var factory = new WSTrustChannelFactory(binding, stsAddress);
factory.TrustVersion = TrustVersion.WSTrustFeb2005;
var rst = new RequestSecurityToken
{
RequestType = RequestTypes.Issue,
KeyType = KeyTypes.Symmetric,
AppliesTo = new EndpointReference(serviceAddress)
};
return factory.CreateChannel().Issue(rst);
}
Следующий шаг, я использую следующий код (попытка) назвать свою службу с SAML в том числе:
var binding = new WSFederationHttpBinding(WSFederationHttpSecurityMode.Message);
binding.Security.Message.EstablishSecurityContext = false;
var factory = new ChannelFactory<ICrossGatewayQueryITI38>(
binding,
new EndpointAddress(new Uri(serviceAddress), new DnsEndpointIdentity("LocalSTS"))
);
factory.Credentials.SupportInteractive = false;
factory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode =
X509CertificateValidationMode.None;
var proxy = factory.CreateChannelWithIssuedToken(token);
var response = proxy.CrossGatewayQuery(
Message.CreateMessage(MessageVersion.Soap12WSAddressing10, "urn:ihe:iti:2007:CrossGatewayQuery", "Hello world")
);
Что будет дальше, я полностью не понимаю. У меня есть скрипач работает, когда я запускаю сценарий, и вот что я вижу:
- Первый запрос на
/STS
(как и ожидалось) В
proxy.CrossGatewayQuery
результаты в трех звонков в/Service
:2.1. A SOAP call with action
http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue
2.2. A SOAP call with action
http://schemas.xmlsoap.org/ws/2005/02/trust/RSTR/Issue
2.3. Окончательный вызов SOAP с действием
urn:ihe:iti:2007:CrossGatewayQuery
. Используя Fiddler, я заметил, что заголовок безопасности SOAP включает утверждение SAML с первого шага.
Окончательный вызов приводит к ошибке SOAP от службы: по крайней мере один токен безопасности в сообщении не может быть проверен. Сохраненный запрос/журнал ответа Скрипач здесь: https://drive.google.com/file/d/0B-UZlLvBjjB2S050TXRhVEo2Vmc/view?usp=sharing
Если кто-то может просветить меня о следующем, я был бы очень благодарен:
- Почему клиент WCF отправить
RST/Issue
иRSTS/Issue
запросы к/Service
(шаги 2.1 и 2.2 выше)? - Как настроить части, чтобы делать то, что я хочу, то есть отправлять один запрос в STS, а затем один запрос к службе, передавая утверждение SAML, которое я получил от STS.