Передача токена SAML службе WCF из Asp.Net - PullRequest
1 голос
/ 27 марта 2012

Когда я пытаюсь вызвать службу WCF из приложения asp.net (RP), которое аутентифицировано другим приложением asp.net (IP), я получаю сообщение об ошибке с содержимым страницы входа в систему (она пытается перейдите на страницу входа, так как не удалось аутентифицировать запрос).

Поставщик удостоверений: _ http://localhost/AuthenticatonWS/Login.aspx

Веб-сайт проверяющей стороны: _ http://localhost/RPWebsite/Default.aspx

Служба WCF: _ http://localhost/RPWebsite/Service1.svc

(В моем решении я звоню service1.svc из default.aspx.cs)

Я не хочу, чтобы служба была анонимной. В настоящее время сайт (RPWebsite) использует STS и доверяет локальному поставщику удостоверений, но в производственном процессе он может доверять любому внешнему поставщику удостоверений через ADFS.

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

Ответы [ 2 ]

0 голосов
/ 15 октября 2013

Я думаю, что есть несколько вариантов:

  1. Использование файлов cookie для постоянной аутентификации, которые поддерживают несколько клиентских сессий.Или поддержите совместное использование сеанса между вашей RP и службой WCF, чтобы WCF мог повторно использовать куки-файлы аутентификации, выпущенные для RP, когда RP делает вызов службе WCF.Если честно, я никогда не пытался реализовать это в действии.Это просто моя теория.
  2. Создайте отдельную службу аутентификации, которая не требует взаимодействия с пользователем (например, ввод имени пользователя / пароля).И тогда у вас есть много способов позвонить в WCF с вашего RP:
    • С вашего RP попросите службу аутентификации выпустить токен для WCF;прикрепить токен в заголовок запроса вызова WCF (например: Авторизация);затем позвоните в службу WCF.Для этого требуется настраиваемый модуль HttpModule для принятия настраиваемого заголовка запроса, содержащего токен в службе WCF.
    • В вашем RP вы также можете сохранить имя пользователя / пароль или уникальное утверждение идентификации пользователя, которое может идентифицировать пользователя;прикрепить эту информацию в заголовок запроса вызова WCF (например: Авторизация);затем позвоните в службу WCF.Это также требует, чтобы пользовательский HttpModule принимал пользовательский заголовок запроса в службе WCF.

Я бы порекомендовал второй вариант, в котором вы можете найти более полезную информацию и указания от ДоминикБлог Байера .

Только мои 2 цента.

0 голосов
/ 27 марта 2012

Проблема вполне может быть в том, что сайт RPW использует ClaimsAuthorizationModule в <system><httpModules> или <system.webserver><modules> в web.config. Это приводит к тому, что любой вызов веб-службы перенаправляется в STS для аутентификации, как если бы это был интерактивный запрос браузера, как вы заметили.

В качестве альтернативы, этот модуль может быть добавлен в определенный для WIF раздел web.config, то есть в <microsoft.identityModel><service>, и в этом случае этот модуль используется только для вызовов веб-службы WCF на основе утверждений. Вы добавляете его в следующей форме: <claimsAuthorizationManager type="MyNamespace.CustomClaimsAuthenticationManager, MyAssembly"/>. (Этот тип должен расширяться ClaimsAuthorizationManager, как описано на странице документации WIF "ClaimsAuthenticationManager, ClaimsAuthorizationManager и OriginalIssuer" .)

Ссылка: Витторио Берточчи, "Программирование WIF", с. 43.

...