OAuth2 con credenciales de cliente v / s otros mecanismos de autenticación

7

Para una API REST contra la cual los clientes escribirían aplicaciones no interactivas y no basadas en navegador, si OAuth2 es el mecanismo de autenticación a seguir, entonces usaríamos el tipo de concesión de credenciales de cliente para la autenticación. ¿Sería esa la elección correcta y, de ser así, cómo es mejor que otros mecanismos de autenticación como Http basic / digest o la autenticación mutua basada en certificación?

    
pregunta Shyamal Pandya 29.01.2014 - 12:32
fuente

1 respuesta

9

OAuth es un protocolo de autorización , no una autenticación protocolo. Su función no es decirle quién está en el otro extremo del cable, sino qué puede hacer esa persona. Sucede que OAuth puede ser abusado en un sistema de autenticación: esto se llama OpenID Connect . La idea es que para proporcionarle la información de autorización (¿se le permite al cliente hacer esto o aquello?), El servidor de OAuth debe asegurarse primero de la identidad del cliente (de quién hablamos) ?); OpenID Connect se trata de reutilizar ese protocolo de autenticación interno ("si el servidor OAuth otorgó acceso, entonces, en particular, el servidor OAuth autenticó al cliente y confiamos en el protocolo utilizado por el servidor OAuth, sea lo que sea").

Si no tiene fe en lo que hace el servidor OAuth para autenticar a los clientes, entonces puede usar otros métodos de autenticación, como contraseñas o certificados de clientes. En ese caso, su servidor realiza la autenticación y luego habla con el servidor de OAuth: "Tengo a Bob en línea, ¿qué se le permite hacer?".

La pregunta se reduce a: ¿es la capa de autenticación en el servidor OAuth adecuada para su situación, o no? Esto depende de usted para decidir. Si decide realizar la autenticación usted mismo, existen varios métodos con varias características. Cuál es el mejor depende del contexto; solo algunos comentarios pueden hacerse de forma genérica:

  • Hagas lo que hagas, usa SSL. Esto es necesario para garantizar que la autenticación y la autorización que realice se apliquen realmente, de manera no modificable, a las solicitudes que el cliente le envíe posteriormente.
  • Ya que usa SSL, no haga un resumen HTTP; utilizar HTTP básico en su lugar. SSL ofrece una protección mucho mejor que lo que ofrece el resumen HTTP (en comparación con HTTP básico); y el resumen de HTTP no es compatible con los mecanismos de almacenamiento del lado del servidor de contraseñas correctos (bcrypt ...).
  • Los certificados de cliente son más complejos para los usuarios, y tienen sentido principalmente cuando autenticación y gestión de identidad se realizan por entidades separadas. Si solo quiere autenticar sus usuarios para su servidor, entonces los certificados son excesivos y probablemente no sea una buena idea.
respondido por el Thomas Pornin 29.01.2014 - 20:45
fuente

Lea otras preguntas en las etiquetas