Как передать токен безопасности (утверждений) в службу WCF включения WIF? - PullRequest
7 голосов
/ 13 сентября 2010

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

Любая помощь будет оценена

Ответы [ 3 ]

6 голосов
/ 05 октября 2010

Ответ не прост, но следующие шаги составляют «рекомендуемый шаблон» и описаны в следующей статье MSDN: Поэтапное делегирование удостоверений личности с AD FS 2.0

В итоге

  1. Предоставить веб-приложению доступ к специальному токену (Bootstrap Token), который можно использовать для запроса услуг от имени пользователя, прошедшего проверку подлинности с использованием STS, добавив элементв файле web.config:

    saveBootstrapTokens="true"

  2. Создайте новое доверие между службой с поддержкой WCF WIF и STS, чтобы он "знал", что эта служба может действоватькак другой аутентифицированный пользователь (ActsAS). Надеюсь, вы используете ADFS v2, так как я представляю, что написание всей верстки для пользовательского STS с поведением ActsAs не является тривиальным.новый канал, специально передающий токен BootStap:

    channel = factory.CreateChannelActingAs(callerToken);

Я немного обеспокоен производительностью из-за создания всех каналов и количества услуг WCFи веб-приложение должно общаться со службой STS.

0 голосов
/ 15 мая 2013

Microsoft предоставляет Identity Traningskit с различными примерами идентификации, используя WIF 4.5. Пример InvokingViaDelegatedAccess in there demonstrates perfectly the usage of the ActAs- delegation scenario. However, it cost me days to bring the InvokingViaDelegatedAccess` Пример запуска и работы. Сделав много обходных путей, я наконец смог запустить установку и выполнить этот пример. Я написал инструкцию по установке, которую вы можете скачать здесь:

введите описание ссылки здесь Наслаждайтесь))

Однако пример работает на виртуальной машине Windows 7 с установленной Visual Studio 2012.

Правильно, что вы должны сохранить токен начальной загрузки. После входа в ваше веб-приложение вы должны сначала кэшировать токен, который был выдан SecurityTokenService. С помощью WIF 4.5 это можно сделать с помощью следующей команды в файле web.config:

<identityConfiguration saveBootstrapContext="true">

В этом случае WCF ChannelFactory имеет различные методы (CreateChannelWithActAsToken, CreateChannelWithIssuedToken, WithOnBehalfOfToken) поддержка сценариев делегирования из внутреннего приложения в службу WCF. Используя сценарий ActAs, CreateChannelWithActAsToken извлекает токен начальной загрузки, отправляет маркер начальной загрузки в STS, STS создает новый SecurityToken с новыми (или скопированными) значениями утверждений, затем внутренняя служба вызывается с использованием ActAs- SecurityToken. Используя этот метод, новый ActAs-SecurityToken будет выдаваться каждый раз, когда вы вызываете сервис. Если вы этого не хотите, CreateChannelWithIssuedToken может быть лучшим способом для вас, потому что вы можете затем кэшировать выделенный токен в cookie и повторно использовать его для других вызовов.

/ patric seiler, разработчик .net www.itconsulting24.com

0 голосов
/ 23 марта 2013

@ Дэвид Эванс - у меня нет репутации, чтобы присоединиться к вашему ответу. Тем не менее, я считаю, что последний шаг неверен и может быть очень запутанным, поскольку вы можете правильно передать маркер начальной загрузки в вызове ActingAs.

Проблема в том, что вы заявляете, что должны передать маркер начальной загрузки. Однако в процессе установления доверия к ActAs создается токен ActAs \ Issued. Этот токен не является токеном начальной загрузки. Фактически, вам нужен маркер начальной загрузки пользователя для создания этого нового токена, который представляет доверяющую сторону, исполняющую роль конкретного аутентифицированного пользователя.

Таким образом, на втором этапе будет создан токен ActAs (который включает в себя все, что вы упомянули). И третьим шагом будет вызов службы WCF с использованием токена ActAs, а не токена начальной загрузки.

...