Como obtener token desde ACS y enviarlo a otro ACS

71 views
Skip to first unread message

Alejandro Labra

unread,
Dec 3, 2012, 3:24:05 PM12/3/12
to altnet-...@googlegroups.com
Hola a todos,

Tengo un problema a ver si alguien me puede dar alguna ayuda, el caso es el siguiente:

Tengo una aplicación web la cual delega la autentificación a Windows Azure ACS, además tengo una API que tiene OTRO ACS, ya que por negocio, la aplicación web es el cliente de esta api (adjunto diagrama)

Dentro del ACS de la aplicación web existe las siguientes configuraciones:
* Identity Providers: ADFS, Facebook
* Relaying Party: Aplicación Web
* Los Rule Groups se encuentran configurados.

Dentro del ACS de la api contiene:
* Identity Providers: el ACS de la aplicacion web.
* Relaying Party: La API
* Los Rule Groups se encuentran configurados.
* Service Identity: la Aplicación Web.


La autentificación de los usuarios entre la aplicación web y su ACS me funciona, el problema es que no he podido obtener un token para la comunicación con la API.

Si alguien me puede decir donde obtener algún ejemplo sería de mucha ayuda.
Gracias
@alabras
Comunicacion_api_web.png

Angel Java Lopez

unread,
Dec 3, 2012, 3:38:57 PM12/3/12
to altnet-...@googlegroups.com
Hola gente!

Alejandro, antes que me olvide, hay otro caso, similar pero distinto, que puede que ayude a dar mas perspectiva al problema:


Pero creo entender que lo que queres es: usar el resultado de la autenticacion del usuario con tu aplicacion web, para ser usados en la autenticacion de la aplicacion web ante la API.

No estoy seguro que sea posible, es asi? comentarios?

Lo que vi, es que la aplicacion web se autentica con sus credenciales/distintos metodos ante la API. Ver por ejemplo el caso descripto en

Nos leemos!

@ajlopez
gh:ajlopez

2012/12/3 Alejandro Labra <alejand...@gmail.com>

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/altnet-hispano/-/zGFsIhuDTMkJ.
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispan...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/altnet-hispano?hl=es.

Alejandro Labra

unread,
Dec 3, 2012, 4:06:40 PM12/3/12
to altnet-...@googlegroups.com
Hola Angel,

Gracias por la respuesta y exactamente, lo que deseo es usar el resultado de la autentificación del usuario con la aplicación web, los claims, para ser usados en la autenticación de la aplicación web ante la API y como los diferentes ACS confían entre ellos debiera, creo, debiera aceptar los tokens de el ACS de la aplicación Web.

Hablando con @nelo me dio algún indicio por donde puede ir la solución

Ahí les cuento como me va.
Saludos
@alabras

nelopa...@gmail.com

unread,
Dec 3, 2012, 4:12:59 PM12/3/12
to altnet-...@googlegroups.com
Alejandro, ¿vos querés obetener un token para que AppWeb acceda a la API?...

Por por lo que dice en
http://msdn.microsoft.com/en-US/library/gg185912.aspx y en también:
http://msdn.microsoft.com/en-US/library/gg185954.aspx lo que tenés que
hacer es invocar a un endpoint de acs (adfs) pasándole las
credenciales de AppWeb (ya sea mediante usuario y password, mediante
certificado, etc) y el token obtenido en el login del usuario (como
ActAs), diciéndole además donde querés acceder (el relaying party de
la API).

Hay un post que escribió un fulano intentando explicar lo que pasa
dentro de ADFS en ese momento, lo cual no es muy relevante, pero entre
las referencias que usó está un código fuente creado por el gran
Matías Wolosky lo cual te puede ser útil. (url del post:
http://nelopauselli.blogspot.com.ar/2012/11/adfs-seguridad-en-servicios-web.html)

saludos.
nelo

2012/12/3 Angel Java Lopez <ajlop...@gmail.com>:

cibrax

unread,
Dec 3, 2012, 10:37:34 PM12/3/12
to altnet-...@googlegroups.com
Pero si el usuario ya se autentico y el mismo usuario consume la API, no podrias usar el session token de WIF (Que internamente guarda todo el token serializado en una cookie) ? Eso lo hace el modulo de FAM de WIF. http://msdn.microsoft.com/en-us/library/ee517293.aspx  

La cosa es distinta si tenes que autenticar a la aplicacion, con lo cual seria lo explicaba angel con lo de Web API y OAuth.

Saludos
Pablo.

Alejandro Labra

unread,
Dec 4, 2012, 12:58:25 PM12/4/12
to altnet-...@googlegroups.com
Hola a todos,

Ya encontré el problema. He estado siguiendo la idea de Nelo, esto es enviando el token del usuario como ActAs para obtener el nuevo token del servicio y ACS me respondía con el siguiente error: "ACS10002: An error occurred while processing the SOAP body.".

Bueno este error no indica mucho, como pueden observar, pero cuando eliminaba del RequestSecurityToken la propiedad ActAs, me arrojaba un error mas entendible:
"ACS10002: An error occurred while processing the SOAP body. ACS50000: There was an error issuing a token. ACS60000: An error occurred while processing rules for relying party 'http://localhost:9000/' using the service identity or identity provider named 'service'. ACS60001: No output claims were generated during rules processing"

Esto es lógico ya que la generación del token no pudo generar las reglas que tengo configuradas.

Así que seguí buscando y me encontré que hasta el último release de Windows Azure ACS (Agosto de este año) no soporta ActAs:


Así que hasta aquí no mas llegue..jaja.. bueno creo que seguiré el consejo de Pablo.

Muchas gracias a todos por sus respuestas.
Saludos
@alabras

Angel Java Lopez

unread,
Dec 4, 2012, 1:01:49 PM12/4/12
to altnet-...@googlegroups.com
Alejandro, gracias por compartir la info!

Si, hace unos anios habia visto un proyecto, donde maese @woloski uso el ActAs, y me lo recordaste en el email que enviaste antes... y ahora me entero que desaparece! (por lo menos en ACS)

Bueno, si tuviera que buscar un "rationale" para eso: es que todo se mueve a OAuth(2) y similares, en los enlaces que se mencionaron, habia uno de ACS con algo tipo OAuth, creo, no?


2012/12/4 Alejandro Labra <alejand...@gmail.com>

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/altnet-hispano/-/qClrsf4X2gUJ.

nelopa...@gmail.com

unread,
Dec 4, 2012, 1:05:46 PM12/4/12
to altnet-...@googlegroups.com
Apa!... ¿tenés algún link sobre eso de que "desaparece el ActAs" y que
"todo se mueve a OAuth2"?

saludos
nelo

2012/12/4 Angel Java Lopez <ajlop...@gmail.com>:

Alejandro Labra

unread,
Dec 4, 2012, 1:08:28 PM12/4/12
to altnet-...@googlegroups.com
Si, de hecho yo pude autentificar la aplicación web contra el servicio usando OAuth2.

Mi problema era como enviar los claims del usuario final, que es en nombre de quien actuará la aplicación web en la Api y me hubiera gustado hacerlo de la "mejor forma" o como se utiliza en WIF. Pero al parecer todavía no podré hasta que Windows Azure soporte ActAs.

Saludos
@alabras

Angel Java Lopez

unread,
Dec 4, 2012, 1:10:45 PM12/4/12
to altnet-...@googlegroups.com
Ah, no!

Digo:

- Lo de "desaparece el ActAs" es soporte de ActAs en ACS, en los enlaces que envio Alejandro
- Lo "moverse a OAuth(2)" es porque ACS desde hace un tiempo soporta ese escenario. 

Juntando los dos, me imagino a la gente de MS moviendo ACS hacia ese lado

Tambien me imagino a alguien en Redmond diciendo:

"Hmm.. esto de ActAs es usar el token original para algo que el proveedor original del token no lo tenia pensado... vean que la comunidad resolvio de otra manera el consumo de una API, vean que usan OAuth(2)... "

Pero son ideas mias, de puro Fox Mulder ;-)

nelopa...@gmail.com

unread,
Dec 4, 2012, 1:27:19 PM12/4/12
to altnet-...@googlegroups.com
Alejandro, consulta, ¿cómo llegaste de "No output claims were
generated during rules processing" a que el problema es el ActAs?...
¿probaste de emitir siempre un claim dummy?

Alejandro Labra

unread,
Dec 4, 2012, 3:23:15 PM12/4/12
to altnet-...@googlegroups.com
Nelo, no realice la prueba con un claim dummy, podría hacerla y creo que funcionaría, pero sin entregar el ActAs.

@alabras




Alejandro Labra

unread,
Dec 4, 2012, 4:29:05 PM12/4/12
to altnet-...@googlegroups.com
Hola a todos... 

Al fin... después de varios intentos lo he logrado :). Seguí el consejo de Pablo (Muchas gracias por la idea) y todo resulto bien, lo que hice fue lo siguiente:

1.- Obtuve el token entre la api y aplicación web a través de OAuth2 (seguí el siguiente ejemplo http://msdn.microsoft.com/en-us/library/gg185911.aspx)
2.- Luego cree un Role Group dummy ya que los claims los envié a través de cookies.
3.- Agregue las cookies al request que realiza la aplicación web a la api.
4.- En la api agregue la configuración de mi STS (ACS).

Con esto puedo obtener en System.Threading.Thread.CurrentPrincipal.Identity el usuario con todos sus claims.

Gracias a todos por la ayuda
@alabras

2012/12/4 Alejandro Labra <alejand...@gmail.com>

cibrax

unread,
Dec 4, 2012, 11:58:16 PM12/4/12
to altnet-...@googlegroups.com
Hola Alejandro,

Me alegro que haya servido. Te comento que lo de ActAs esta mas orientado a cuando tu aplicacion web tiene que hacer llamados a una API hosteada en algun otro lado que tambien espera un token. O bien, cuando tenes un servicio que recibe un token y tiene que llamar a otro servicio que tambien espera otro token (delegacion basicamente). Si la aplicacion web y la API estan hosteadas en la misma aplicacion web, todo eso carece de sentido. 

Saludos
Pablo.

El lunes, 3 de diciembre de 2012 17:24:05 UTC-3, Alejandro Labra escribió:

Alejandro Labra

unread,
Dec 5, 2012, 9:33:22 AM12/5/12
to altnet-...@googlegroups.com
Hola Pablo,

Entiendo, en mi negocio la api "podría" estar hosteada en otro lado, por eso quería usar lo de ActAs. Ahora en este caso en particular están juntas, pero podría no ser así.

Saludos
@alabras

Leandro Boffi

unread,
Dec 5, 2012, 9:43:06 AM12/5/12
to altnet-...@googlegroups.com
Me prendo tarde pero, probaste configurar como identity provider en el ACS de la api el ACS de la app web? De esa forma podrías pedir un token al ACS de la api usando el token que te dio el ACS de la app web.
--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/altnet-hispano/-/nbmRIUv8uxUJ.

Alejandro Labra

unread,
Dec 5, 2012, 9:55:30 AM12/5/12
to altnet-...@googlegroups.com
Hola Leandro,

Si, de hecho así lo tengo configurado. Mi problema fue intentar pasar el token del Usuario logeado en la aplicación web en el nuevo token solicitado a la api. Esto se logra indicando al RequestSecurityToken que actue como (ActAs) el usuario, entregando el primer token.

Saludos
@alabras
Para publicar una entrada en este grupo, envía un correo electrónico a altnet-hispano@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a altnet-hispano+unsubscribe@googlegroups.com

cibrax

unread,
Dec 5, 2012, 11:16:13 AM12/5/12
to altnet-...@googlegroups.com
Me gusta la respuesta de Eugenio en unos de los links que puso Alejandro,

"Also, other protocols are emerging as favorites for APIs(e.g. OAuth, etc) and seem to be less complicated. 'Simpler' tends to win over 'powerful and complex'. At least initially. Then 'simpler' becomes 'powerful and complex' and the cycle starts again :-) "

Y esto esta realmente ocurriendo. OAuth se volvio tan complejo que la gente ya esta buscando nuevas alternativas. Unos de las personas que inicialmento ideo OAuth y estuvo hasta ultimo momento en el grupo que definia la especificacion, se fue y empezo una nueva especificacion,


Saludos
Pablo.
Reply all
Reply to author
Forward
0 new messages