Служба WCF, использующая пассивно выданный токен SAML - PullRequest
3 голосов
/ 20 мая 2010

Как лучше всего передать существующий токен SAML с веб-сайта, уже прошедшего проверку подлинности через пассивную STS?

Мы создали Identity Provider, который выдает пассивные заявки на веб-сайт для аутентификации. У нас это работает. Теперь мы хотели бы добавить некоторые WCF-сервисы - вызывая их из контекста уже аутентифицированного веб-приложения. В идеале мы просто хотели бы передать токен SAML, ничего не делая с ним (т.е. добавление новых заявок / повторное подписание). Все примеры, которые я видел, требуют реализации ActAs sts - но действительно ли это необходимо? Это кажется немного раздутым для того, чего мы хотим достичь.

Я бы подумал, что простая реализация передает токен начальной загрузки в канал - используя механизм CreateChannelActingAs или CreateChannelWithIssuedToken (и устанавливая ChannelFactory.Credentials.SupportInteractive = false) для вызова службы WCF с правильной привязкой (что это будет? ) было бы достаточно.

Мы используем пример кода Fabrikam в качестве ссылки, но, как я уже сказал, думаю, что функциональность ActAs здесь избыточна для того, чего мы пытаемся достичь.

1 Ответ

1 голос
/ 08 июля 2010

В этом случае вам нужно вставить содержимое вашего токена в каждое исходящее сообщение. Если вы посмотрите на WIF Identity Training Toolkit , у них есть класс IssuedTokenHeader, который поможет этому (наряду с ClaimsIdentitySessionManager). Эти классы были созданы для Silverlight, но это не меняет предлагаемого ими решения.

Вот выдержка из класса ClaimsIdentitySessionManager.

using (OperationContextScope scope = new OperationContextScope(contextChannel))
{
   IssuedTokenHeader header = new IssuedTokenHeader(this.TokenCache.GetTokenFromCache(serviceAppliesTo));
   OperationContext.Current.OutgoingMessageHeaders.Add(header);
   asyncOperation();
}
...