2010-05-05 3 views
18

Я пытаюсь понять разницу между федерацией Active и Passive в WIF. Похоже, что если активная федерация (RP) - это служба WCF, а не приложение ASP.NET и пассивная федерация, если RP-приложение является ASP.NET, используется активная федерация. Это точно?Активная и пассивная федерация в WIF

Таким образом, в сценарии, в котором приложение ASP.NET использует WCF в бэкэнд, в статьях MS предлагается использовать токен безопасности для начальной загрузки, который получается приложением ASP.NET с использованием ActAs STS и этого токена используется для аутентификации с помощью WCF. В этом случае кажется, что мы делаем комбинацию Active (user -> STS -> ASP.NET RP) и Пассивной (ASP.NET -> ActAs STS -> WCF) федерации?

ответ

21

Активная федерация об аутентификации пользователя с использованием протоколов WSTrust, а ваша Сторона-доверенность - это кто-то, кто имеет окно входа в систему и запрашивает токен безопасности для STS. Пассивная федерация - это когда у Relying Party нет логина логина, и вы перенаправлены на страницу входа, расположенную на STS. Активная федерация сложнее настраивать, на мой взгляд (я работаю с silverlight, поэтому ей нужны некоторые трюки). Я планирую опубликовать эту тему в своем блоге, потому что в Интернете мало информации об этом.

+0

В моем примере активная федерация - это когда служба WCF является полагающейся стороной (так как у нее нет страницы входа). Правильно? – Nick

+2

Нет, ваша служба WCF должна иметь некоторый механизм для создания SOAP-сообщения и передачи учетных данных STS, это активная федерация, и ваша служба является Active Requestor (вы можете получать учетные данные так, как вы хотите, например, используя окно входа в систему из Silverlight). Если вы хотите использовать страницу входа в систему из Identity Provider и не беспокоитесь о получении и передаче учетных данных, вы должны использовать пассивную федерацию, и в этом случае ваша служба - это Passive Requestor (он только перенаправляет, а IdP выполняет все работы). –

+0

Вы когда-нибудь общались с блогом? Я искал документацию о том, как сделать активную аутентификацию для приложения MVC без везения :-( – Roly

1

Короче говоря, Пассивная федерация - это всего лишь фраза, используемая для представления сценария, в котором ваш браузер перенаправляется на страницу входа, размещенную STS. После входа в систему STS перенаправляет вас обратно к ссылочному URL-адресу с некоторым файлом cookie или что-то еще, и вы прошли аутентификацию на сайте, который доверяет STS (используя отпечатки, сертификаты, шифрование и т. Д.).

Вам также не нужно это делать. Я, например, например, как мои сайты ASP.NET, активно связывается с STS, используя учетные данные, предоставленные пользователем, но это означает, что пул приложений ASP.NET должен пройти аутентификацию в STS с использованием Windows Auth, чтобы отправить учетные данные, предоставленные пользователем, получить токен, а затем я явно добавить токен в сеанс. Другими словами, я не использовал пассивную федерацию, но это просто выбор.

1

Вы можете прочитать больше о пассивных претензиях здесь:

http://garymcallisteronline.blogspot.co.uk/2012/11/claims-explained.html

Активного вызовом является прямым вызовом к WSActive конечной точке (они поддерживают множество типов аутентификации) .. Следующий код показывает активный вызов с помощью активная конечная точка имени пользователя.

private static GenericXmlSecurityToken GetToken(string username, string password, string url, string audienceUrl) 
    { 
     var factory = new WSTrustChannelFactory(new Microsoft.IdentityModel.Protocols.WSTrust.Bindings.UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential), new EndpointAddress(url)); 
     factory.Credentials.UserName.UserName = username; 
     factory.Credentials.UserName.Password = password; 

     factory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None; 
     factory.TrustVersion = TrustVersion.WSTrust13; 
     WSTrustChannel channel = null; 

     var rst = new RequestSecurityToken 
     { 
      RequestType = WSTrust13Constants.RequestTypes.Issue, 
      AppliesTo = new EndpointAddress(audienceUrl), 
      KeyType = WSTrust13Constants.KeyTypes.Bearer, 
     }; 
     channel = (WSTrustChannel)factory.CreateChannel(); 
     return channel.Issue(rst) as GenericXmlSecurityToken; 
    } 
+0

Кто-нибудь знает, как сделать эквивалент в .NET 4.5? Похоже, многое изменилось, в частности, «UserNameWSTrustBinding» больше не существует ...? – ctb

0

Даже я была такая же проблема изначально, но это blog мне очень помог.

Сначала я предлагаю вам пройти через samples, а затем проанализировать документацию.

Федерация WCF сложна.

Смежные вопросы