Diseño de API y mecanismos de seguridad

64 views
Skip to first unread message

Christian Palomares (ShinjiDev)

unread,
Jan 5, 2012, 3:09:01 PM1/5/12
to AltNet-Hispano
Holas

Actualmente estoy participando en el desarrollo de una API en la
empresa que laboro y para el diseño de ésta tratamos de guiarnos de
los "best practices" para lo cual ya vimos algunos links y videos
(como el de acá http://www.youtube.com/watch?v=aAb7hSCtvGw ).

Pero aparte de eso queríamos conocer un poco al respecto de los
mecanismos de seguridad que se pueden usar para una API que va ser
usada no solo en la parte web, sino tb en dispositivos como
smartphones o tablets.

Cualquier ayuda o experiencia de alguien será agradecida =)

Saludos

Ariel Piñeiro

unread,
Jan 5, 2012, 3:33:40 PM1/5/12
to altnet-...@googlegroups.com

Saludos,
Ariel Piñeiro
http://ar.linkedin.com/in/arielpineiro


Chrstian, 
            para la seguridad te recomiendo OAuth

Salutes.


2012/1/5 Christian Palomares (ShinjiDev) <palom...@gmail.com>

--
Has recibido este mensaje porque estás suscrito al grupo "AltNet-Hispano" de Grupos de Google.
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.


Christian Eduardo Palomares Peralta

unread,
Jan 5, 2012, 3:35:57 PM1/5/12
to altnet-...@googlegroups.com
Estuve leyendo al respecto en oauth.net , pero existe algún framework o librería ya diseñado para hacer este tipo de validación tanto como provider, así como consumer????

Saludos
--
Christian Eduardo Palomares Peralta (ShinjiDev) - http://learningwebdev.blogspot.com
Administrador del Grupo Python-Perú

nelopa...@gmail.com

unread,
Jan 5, 2012, 3:46:13 PM1/5/12
to altnet-...@googlegroups.com
Hola Christian,

¿a que te referís con "seguridad"? ¿autenticación y autorización? ¿solo autenticación? ¿roles? ¿etc?.

¿vas a querer integrarte con cuentas públicas (twitter, facebook, etc)? ¿que tecnologías tenés en los servidores y en los clientes?... estaba pensando en que tenés .NET pero este tema, muchas veces, abarca varias tecnologías.

¿quienes serían los usuarios? ¿cualquiera? ¿empleados de una empresa?

creo que contestarte estas preguntas te van a ayudar a orientarte en lo que andás buscando. Productos y frameworks hay varios.

saludos.
nelo


2012/1/5 Christian Eduardo Palomares Peralta <palom...@gmail.com>

Ariel Piñeiro

unread,
Jan 5, 2012, 3:46:48 PM1/5/12
to altnet-...@googlegroups.com
2012/1/5 Christian Eduardo Palomares Peralta <palom...@gmail.com>
Estuve leyendo al respecto en oauth.net , pero existe algún framework o librería ya diseñado para hacer este tipo de validación tanto como provider, así como consumer????

Christian Eduardo Palomares Peralta

unread,
Jan 5, 2012, 3:53:51 PM1/5/12
to altnet-...@googlegroups.com
Veamos

A lo que me refiero con seguridad es que deseamos que la API sea usada solo por los dispositivos que deseamos que accedan a la API. Si es que realizamos la llamada a la API de forma netamente plana, se tendrá problemas pues con un simple sniffering se pueden obtener las llamadas a la API y bombardearla de diversas formas, e incluso puede causarnos problemas porque algunas de estas llamadas van a hacer transacciones autorizadas por el usuario.

Estuve echándole ojo a lo que muestran en el sgte link:


Pero veo un problema, pues si es que la app es un apk de android y la app_key con la que se encripta el contenido a enviar está en la misma app, esta podría ser, de alguna forma, decompilada y si obtienen la llave y el app_id van a tener acceso total a la API nuevamente.

BTW, como server la API será hecha en C#, mientras que los clientes pueden ser una web hecha con ASP NET MVC3, una app en android e incluso una en iOS.

Saludos

Angel Java Lopez

unread,
Jan 5, 2012, 4:48:24 PM1/5/12
to altnet-...@googlegroups.com
Hola gente!

Christian, OAuth fue inventado para el caso que planteas. Ya no recuerdo todo lo de seguridad que tenia, pero por si me olvidaba:


Eso ya tiene medio anio, desconozco el estado actual.
Fijate en el primer enlace, a mi me sirvieron los ejemplos que denomine ahi "key" Son dos, uno cliente web, y otro cliente desktop.

OAuth2 es una evolucion de OAuth1, y OAuth1 nacio de Flickr y cia, asi que si estudias esas implementaciones, y lo que hay para .NET (yo use el servicio de ACS como dicen en los ejemplos "key"), vas a ver resuelto todos los temas de seguridad que mencionas y mas (espero ;-)

Nos leemos!

Angel "Java" Lopez

Christian Eduardo Palomares Peralta

unread,
Jan 24, 2012, 4:27:02 PM1/24/12
to altnet-...@googlegroups.com
Mil disculpas la demora en respuesta, pero me sacaron del tema por un tiempo, pero ya volví al mismo problema.

Respecto a oauth no se da en el caso que diera dar acceso a terceros a la API???En sí yo no quiero dar acceso a terceros, sino a apps que yo estoy creando para usar esta API (apps en android y iOS). No existe algún mecanismo sencillo y que entregue seguridad al respecto???

Saludos
Christian Eduardo Palomares Peralta (ShinjiDev) - http://shinjidev.com

Angel Java Lopez

unread,
Jan 24, 2012, 4:34:41 PM1/24/12
to altnet-...@googlegroups.com
Bueno, esas apps son "terceros". Y hasta otros programadores podrian armar Otras aplicaciones contra la api, y lo agregas como "terceros".

Pero supongo que querras algo mas sencillo.

2012/1/24 Christian Eduardo Palomares Peralta <palom...@gmail.com>

Christian Eduardo Palomares Peralta

unread,
Jan 25, 2012, 7:41:12 AM1/25/12
to altnet-...@googlegroups.com
Exacto, no quiero algo tan complejo en lo que es seguridad, pues lo de OAuth lo veo más para darle acceso a terceros y como "liberar" la API para el uso de externos a la empresa, así como también que el usuario autorice el acceso de estas, lo cual no se busca en ésta.

Saludos

Angel Java Lopez

unread,
Jan 25, 2012, 8:06:05 AM1/25/12
to altnet-...@googlegroups.com
Hola gente!

Christian, estuve revisando el thread, y no me queda claro que tecnologia van a usar, supongo que es REST, no?

Algunas recomendaciones:

Ver de usar https
Ver el tema man-in-the-middle

El tema a revisar: tus tecnologias cliente, permiten albergar certificados? Si se siguen las recomendaciones de arriba, ese es el tema de base que tienes que resolver.


2012/1/25 Christian Eduardo Palomares Peralta <palom...@gmail.com>

cibrax

unread,
Jan 25, 2012, 9:05:53 AM1/25/12
to AltNet-Hispano
OAuth agrega un nivel de indireccion para que el usuario pueda
basicamente autorizar que aplicaciones pueden consumir sus datos via
la API. Por ejemplo, un tercero puede desarrollar una aplicacion
malisiosa que un usuario sin saberlo la utiliza. El usuario luego
puede simplemente restringir que esa aplicacion no pueda tener mas
acceso a sus datos.

Si vos no tenes esos requirimientos, podes simplemente proteger toda
la comunicacion con https y utilizar un API key por usuario. Por cada
llamada a tu API, la aplicacion cliente pasa ese key. Muchos servicios
funcionan actualmente de esta manera, como google maps por ejemplo.
Los servicios de storage de Azure tambien usan keys asociadas al
usuario.

Saludos
Pablo.

On Jan 25, 10:06 am, Angel Java Lopez <ajlopez2...@gmail.com> wrote:
> Hola gente!
>
> Christian, estuve revisando el thread, y no me queda claro que tecnologia
> van a usar, supongo que es REST, no?
>
> Algunas recomendaciones:http://www.infoq.com/news/2010/01/rest-api-authentication-schemes
>
> Ver de usar https
> Ver el tema man-in-the-middle
>
> El tema a revisar: tus tecnologias cliente, permiten albergar certificados?
> Si se siguen las recomendaciones de arriba, ese es el tema de base que
> tienes que resolver.
>
> Nos leemos!
>
> Angel "Java" Lopezhttp://www.ajlopez.comhttp://twitter.com/ajlopez
>
> 2012/1/25 Christian Eduardo Palomares Peralta <palomare...@gmail.com>
>
>
>
> > Exacto, no quiero algo tan complejo en lo que es seguridad, pues lo de
> > OAuth lo veo más para darle acceso a terceros y como "liberar" la API para
> > el uso de externos a la empresa, así como también que el usuario autorice
> > el acceso de estas, lo cual no se busca en ésta.
>
> > Saludos
>
> > El 24 de enero de 2012 18:34, Angel Java Lopez <ajlopez2...@gmail.com>escribió:
>
> > Bueno, esas apps son "terceros". Y hasta otros programadores podrian armar
> >> Otras aplicaciones contra la api, y lo agregas como "terceros".
>
> >> Pero supongo que querras algo mas sencillo.
>
> >> 2012/1/24 Christian Eduardo Palomares Peralta <palomare...@gmail.com>
>
> >>> Mil disculpas la demora en respuesta, pero me sacaron del tema por un
> >>> tiempo, pero ya volví al mismo problema.
>
> >>> Respecto a oauth no se da en el caso que diera dar acceso a terceros a
> >>> la API???En sí yo no quiero dar acceso a terceros, sino a apps que yo estoy
> >>> creando para usar esta API (apps en android y iOS). No existe algún
> >>> mecanismo sencillo y que entregue seguridad al respecto???
>
> >>> Saludos
>
> >>> El 5 de enero de 2012 18:48, Angel Java Lopez <ajlopez2...@gmail.com>escribió:
>
> >>> Hola gente!
>
> >>>> Christian, OAuth fue inventado para el caso que planteas. Ya no
> >>>> recuerdo todo lo de seguridad que tenia, pero por si me olvidaba:
>
> >>>>http://ajlopez.wordpress.com/2011/06/22/oauth-oauth2-and-azure-access...
>
> >>>>http://ajlopez.wordpress.com/category/oauth/
>
> >>>> Eso ya tiene medio anio, desconozco el estado actual.
> >>>> Fijate en el primer enlace, a mi me sirvieron los ejemplos que denomine
> >>>> ahi "key" Son dos, uno cliente web, y otro cliente desktop.
>
> >>>> OAuth2 es una evolucion de OAuth1, y OAuth1 nacio de Flickr y cia, asi
> >>>> que si estudias esas implementaciones, y lo que hay para .NET (yo use el
> >>>> servicio de ACS como dicen en los ejemplos "key"), vas a ver resuelto todos
> >>>> los temas de seguridad que mencionas y mas (espero ;-)
>
> >>>> Nos leemos!
>
> >>>> Angel "Java" Lopez
> >>>>http://www.ajlopez.com
> >>>>http://twitter.com/ajlopez
>
> >>>> 2012/1/5 Christian Eduardo Palomares Peralta <palomare...@gmail.com>
>
> >>>>> Veamos
>
> >>>>> A lo que me refiero con seguridad es que deseamos que la API sea usada
> >>>>> solo por los dispositivos que deseamos que accedan a la API. Si es que
> >>>>> realizamos la llamada a la API de forma netamente plana, se tendrá
> >>>>> problemas pues con un simple sniffering se pueden obtener las llamadas a la
> >>>>> API y bombardearla de diversas formas, e incluso puede causarnos problemas
> >>>>> porque algunas de estas llamadas van a hacer transacciones autorizadas por
> >>>>> el usuario.
>
> >>>>> Estuve echándole ojo a lo que muestran en el sgte link:
>
> >>>>>http://net.tutsplus.com/tutorials/php/creating-an-api-centric-web-app...
>
> >>>>> Pero veo un problema, pues si es que la app es un apk de android y la
> >>>>> app_key con la que se encripta el contenido a enviar está en la misma app,
> >>>>> esta podría ser, de alguna forma, decompilada y si obtienen la llave y el
> >>>>> app_id van a tener acceso total a la API nuevamente.
>
> >>>>> BTW, como server la API será hecha en C#, mientras que los clientes
> >>>>> pueden ser una web hecha con ASP NET MVC3, una app en android e incluso una
> >>>>> en iOS.
>
> >>>>> Saludos
>
> >>>>> El 5 de enero de 2012 17:46, nelopause...@gmail.com <
> >>>>> nelopause...@gmail.com> escribió:
>
> >>>>> Hola Christian,
>
> >>>>>> ¿a que te referís con "seguridad"? ¿autenticación y autorización?
> >>>>>> ¿solo autenticación? ¿roles? ¿etc?.
>
> >>>>>> ¿vas a querer integrarte con cuentas públicas (twitter, facebook,
> >>>>>> etc)? ¿que tecnologías tenés en los servidores y en los clientes?... estaba
> >>>>>> pensando en que tenés .NET pero este tema, muchas veces, abarca varias
> >>>>>> tecnologías.
>
> >>>>>> ¿quienes serían los usuarios? ¿cualquiera? ¿empleados de una empresa?
>
> >>>>>> creo que contestarte estas preguntas te van a ayudar a orientarte en
> >>>>>> lo que andás buscando. Productos y frameworks hay varios.
>
> >>>>>> saludos.
> >>>>>> nelo
>
> >>>>>> 2012/1/5 Christian Eduardo Palomares Peralta <palomare...@gmail.com>
>
> >>>>>>> Estuve leyendo al respecto en oauth.net , pero existe algún
> >>>>>>> framework o librería ya diseñado para hacer este tipo de validación tanto
> >>>>>>> como provider, así como consumer????
>
> >>>>>>> Saludos
>
> >>>>>>> El 5 de enero de 2012 17:33, Ariel Piñeiro <ariel...@gmail.com>escribió:
>
> >>>>>>>> Saludos,
> >>>>>>>> Ariel Piñeiro
> >>>>>>>>http://ar.linkedin.com/in/arielpineiro
>
> >>>>>>>> Chrstian,
> >>>>>>>>             para la seguridad te recomiendo OAuth<http://es.wikipedia.org/wiki/OAuth>
>
> >>>>>>>> Salutes.
>
> >>>>>>>> 2012/1/5 Christian Palomares (ShinjiDev) <palomare...@gmail.com>
> >>> Christian Eduardo Palomares Peralta (ShinjiDev) -http://shinjidev.com
>
> >>>  --
> >>> Has recibido este mensaje porque estás suscrito al grupo
> >>> "AltNet-Hispano" de Grupos de Google.
> >>> Para publicar una entrada en este grupo, envía un correo electrónico a
>
> ...
>
> read more »

Christian Eduardo Palomares Peralta

unread,
Jan 25, 2012, 9:17:42 AM1/25/12
to altnet-...@googlegroups.com
Me agrada la 2da opción.  Si es que le va dar una api key o token, es necesario enviar este token dentro de la url???
Christian Eduardo Palomares Peralta (ShinjiDev) - http://shinjidev.com

card...@gmail.com

unread,
Jan 25, 2012, 9:26:22 AM1/25/12
to altnet-...@googlegroups.com

card...@gmail.com

unread,
Jan 25, 2012, 9:26:34 AM1/25/12
to altnet-...@googlegroups.com

card...@gmail.com

unread,
Jan 25, 2012, 9:28:25 AM1/25/12
to altnet-...@googlegroups.com

cibrax

unread,
Jan 26, 2012, 10:06:59 AM1/26/12
to AltNet-Hispano
Es indiferente como lo pases. Mientras utilices Https, esta todo
encriptado. Lo podes pasar en la URL o en el body del request. En la
segunda opcion es menos visible.



On Jan 25, 11:17 am, Christian Eduardo Palomares Peralta
> ...
>
> read more »

Christian Eduardo Palomares Peralta

unread,
Jan 26, 2012, 10:07:59 AM1/26/12
to altnet-...@googlegroups.com
Muchas gracias por la ayuda de todos.

Saludos
Christian Eduardo Palomares Peralta (ShinjiDev) - http://shinjidev.com

Angel Java Lopez

unread,
Jan 26, 2012, 11:45:22 AM1/26/12
to altnet-...@googlegroups.com
Ahi me perdi...

Christian, no es que eras reluctante a tener una Key en el programa cliente, por tema que te la copien y la usen desde otro programa?

2012/1/25 Christian Eduardo Palomares Peralta <palom...@gmail.com>

Christian Eduardo Palomares Peralta

unread,
Jan 27, 2012, 7:28:28 AM1/27/12
to altnet-...@googlegroups.com
Más que todo, lo que trato de evitar es que la api_key esté dentro de la app misma, debido a que una decompilada nomás y la pueden obtener, a eso me refería o.o

Pero igual al mantener una serie de app_key que se generen dinámicamente podría tener control de estas y dar o quitar acceso.

Saludos

Angel Java Lopez

unread,
Jan 27, 2012, 7:51:22 AM1/27/12
to altnet-...@googlegroups.com
Hola gente!

Interesante, Christian.. a ver si entiendo.

Pero donde las generarias dinamicamente? En el servidor?

Si es asi, las pasarias a la aplicacion cliente. Pero como saber que ese aplicacion cliente no es la tuya?

2012/1/27 Christian Eduardo Palomares Peralta <palom...@gmail.com>

Christian Eduardo Palomares Peralta

unread,
Feb 7, 2012, 2:01:52 PM2/7/12
to altnet-...@googlegroups.com
Disculpa la demora

Inicialmente con una llave que tiene la app, que se le puede otorgar acceso a toda la API, así como también quitarle el acceso en caso de obtención de esta llave.

Gracias por todo

Saludos

Carlos Admirador

unread,
Nov 4, 2017, 12:35:26 PM11/4/17
to AltNet-Hispano
Algún ejemplo real world al respecto? se pasa la llave en las headers? cómo ? Cómo generar la llave, y cómo pasarla a pagina html cliente de forma segura ?
Reply all
Reply to author
Forward
0 new messages