2010-09-12 10 views
7

Tengo curiosidad por saber cómo podríamos enviar un token de seguridad desde una aplicación WIF que ya se haya autenticado en un servicio WCF habilitado para WIF.Cómo pasa un Token de seguridad (Reclamaciones) a un servicio WF de habilitación WCF

Cualquier ayuda será appriciated

+0

Tenía la esperanza de que se obtendría una respuesta a esto. Es el diseño predeterminado: aplicación web -> servicio WCF. Se recomienda a los desarrolladores de .Net que utilicen WIF, pero las sugerencias de implementación que estoy viendo no son preceptivas. –

Respuesta

6

La respuesta no es sencilla, pero los siguientes pasos constituyen el 'patrón recomendado' y se documenta en el siguiente artículo de MSDN: Identity Delegation with AD FS 2.0 Step-by-Step Guide

En resumen

  1. Permitirle a la aplicación web acceso a un token especial (Bootstrap Token) que se puede usar para solicitar servicios en nombre del usuario que se ha autenticado utilizando un STS agregando un i TEM en el web.config:

    saveBootstrapTokens="true"

  2. Crear una nueva confianza entre el servicio habilitado WCF WIF y el STS por lo que 'sabe' que el servicio que puede actuar como un usuario autenticado (actsAs). Afortunadamente, está usando ADFS v2 ya que me imagino escribiendo todas las tuberías para un STS personalizado con Acts Como el comportamiento no es trivial.

  3. Al llamar al servicio WCF se crea un nuevo canal que pasa específicamente el token BootStap:

    channel = factory.CreateChannelActingAs(callerToken);

estoy un poco preocupado por el rendimiento debido a la totalidad de la creación de canales y cómo los servicios WCF y la aplicación web deben comunicarse con el servicio STS.

0

@David Evans - No tengo la reputación de anexar su respuesta. Sin embargo, creo que el último paso es incorrecto y podría ser muy confuso ya que puede pasar válidamente el token de arranque en la llamada ActingAs.

El problema es que indica que debe pasar el token de arranque. Sin embargo, lo que sucede es que en el proceso de establecer la confianza de ActAs, se crea un Token de ActAs \ Issued. Este token no es el token de arranque. De hecho, necesita el token de arranque del usuario para crear este nuevo token, que representa el acto de actuar como el usuario autenticado en particular.

Así que el paso dos sería el token Create ActAs (que implica todo lo que usted menciona). Y el paso tres sería llamar al servicio WCF utilizando el token ActAs, no el token bootstrap.

0

Microsoft proporciona un Identity Traningskit con diferentes ejemplos de identidad, utilizando WIF 4.5. El ejemplo InvokingViaDelegatedAccess in there demonstrates perfectly the usage of the ActAs- delegation scenario. However, it cost me days to bring the InvokingViaDelegatedAccess` Ejemplo de ejecución y ejecución. Después de hacer muchas soluciones, finalmente pude ejecutar la configuración y ejecutar este ejemplo. He escrito un manual de instalación que se puede descargar aquí:

enter link description here Enjoy))

El ejemplo sin embargo se ejecuta en una máquina virtual de Windows 7 que tiene Visual Studio 2012 instalado.

Es correcto, que debe guardar el token de arranque.Después de iniciar sesión en su aplicación Weba, primero debe almacenar en caché el token que se emitió desde SecurityTokenService. Usando WIF 4.5 esto se puede hacer con el siguiente comando en el web.config:

<identityConfiguration saveBootstrapContext="true"> 

El WCF ChannelFactory tiene entonces diferentes métodos (CreateChannelWithActAsToken, CreateChannelWithIssuedToken, WithOnBehalfOfToken) de apoyo escenarios de delegación de una aplicación de fondo a un WCF Servicio. Con el escenario ActAs, CreateChannelWithActAsToken extrae el token de arranque, el token de inicio de arranque se envía a un STS, el STS crea un nuevo SecurityToken con valores de reclamo nuevos (o copiados), y luego se llama al servicio back-end utilizando ActAs-SecurityToken. Con este método, se emitirá un nuevo ActAs-SecurityToken cada vez que llame al servicio. Si no lo hace, CreateChannelWithIssuedToken puede ser el mejor método para usted, ya que puede almacenar en caché el token emitido en una cookie y volver a usarlo para otras llamadas.

/Seiler Patric, desarrollador .net www.itconsulting24.com

Cuestiones relacionadas