ruby-on-rails oauth-2.0 single-sign-on saml cas

ruby on rails - CAS vs. SAML vs. OAuth2



ruby-on-rails oauth-2.0 (5)

Anjan.

He usado CAS y OAuth en mi trabajo. Estas son algunas de mis opiniones, y espero ayudar.

Básicamente

  • Tanto CAS como SAML apuntan a resolver la situación de SSO. Y CAS es un servicio o un sistema de autenticación que puede admitir el protocolo SAML.
  • OAuth tiene como objetivo resolver la autorización y la autenticación.

Y en la práctica,

  • Tanto CAS como SAML actúan como una puerta de enlace frente a un grupo de aplicaciones que pertenecen a una sola organización. Al igual que su caso.
  • OAuth se utiliza para autorizar y autenticar entre diferentes organizaciones.

Solo mis pensamientos, y espero escuchar más voces.

Antes de posponerme por hacer una pregunta demasiado básica sin hacer ninguna tarea, me gustaría decir que he estado leyendo mucho sobre estos temas, pero todavía estoy confundido.

Mis necesidades parecen bastante simples. En mi compañía, tenemos un montón de aplicaciones de Ruby on Rails. Quiero construir un servicio de autenticación SSO que todas esas aplicaciones deberían usar.

Al tratar de investigar sobre cómo hacer esto, leo sobre CAS , SAML y OAuth2 . (Sé que la "autenticación" en OAuth significa autorización y no autenticación, pero he leído suficientes artículos que dicen cómo OAuth se puede utilizar para la autenticación, this es una de ellas).

¿Podría alguien decirme en términos simples qué son estos 3? ¿Son alternativas (compitiendo)? ¿Es incluso correcto compararlos?

Y hay tantas gemas que parecen estar diciendo cosas muy similares:

Solo quiero una aplicación Rails separada que maneje toda la autenticación para mis otras aplicaciones de Rails.

Nota: no quiero permitir que los usuarios usen sus cuentas de Google / Facebook para iniciar sesión. Nuestros usuarios ya tienen cuentas en nuestro sitio. Quiero que puedan iniciar sesión con esa cuenta una vez y poder acceder a todas nuestras aplicaciones sin iniciar sesión nuevamente. Cerrar sesión en cualquier aplicación debe cerrarla en todas las aplicaciones.

ACTUALIZAR

Me he encontrado con estas dos soluciones de OAuth:

Parecen describir algo muy similar a lo que quiero. Pero no he encontrado ninguna guía / blog post / tutorial que muestre cómo hacerlo con SAML / CAS.

Sugerencias bienvenidas.

ACTUALIZACIÓN 2

Más detalles sobre nuestro caso de uso.

No tenemos ninguna arquitectura SAML existente en su lugar. En primer lugar, serán NUESTROS usuarios (registrados directamente en nuestro sitio web) los que van a acceder a todas nuestras aplicaciones. En el futuro, podemos tener compañías de terceros (socios) llamando a nuestras API. También podemos tener acceso a nuestras aplicaciones a usuarios de estas empresas (asociadas) (registradas en sus sitios web).


Dado que tiene muchas respuestas para esta pregunta, me gustaría sugerirle un producto de identidad que pueda atender este tipo de protocolo en una mano con muchas características de autenticación y administración de usuarios. Puede probar la versión de WSO2 Identity Server para esto.


Hemos utilizado CAS y SAML en nuestra arquitectura (aplicación móvil, portal en línea y microServicios) y ambos se utilizan para diferentes propósitos. Nuestro portal en línea es como la banca en línea que se ejecuta en el dominio público y tiene que ser seguro. No deseamos almacenar contraseñas ni otros tokens seguros en la base de datos del portal en línea, por lo tanto, utilizamos CAS para autenticación y autorización. Durante el registro, cuando el usuario elige la contraseña, almacenamos la contraseña en CAS y almacenamos el token correspondiente en la base de datos de Portal
Cuando el usuario inicie sesión la próxima vez, el usuario ingresará el nombre de usuario y la contraseña en Portal. Portal recupera el token correspondiente al usuario de la base de datos y envía el nombre de usuario, la contraseña y el token a CAS para su validación.
Pero, en caso de que el usuario ya haya iniciado sesión en una aplicación y redirigamos al usuario a nuestra otra aplicación, no queremos que el usuario ingrese nuevamente el nombre de usuario y la contraseña para la segunda aplicación. Usamos SAML para resolver esto. La primera aplicación comparte los detalles del usuario con el servidor SAML y recibe un token a cambio. La primera aplicación pasa el token a la segunda aplicación. La segunda aplicación envía el token al servidor SAML para obtener los detalles del usuario y, en caso de éxito, el usuario accede a la página deseada. Nuestra primera aplicación puede ser una aplicación móvil y la segunda puede ser Portal en el escenario de App2Web.


Si necesita autenticarse para LDAP o ActiveDirectory , una solución como una de las gemas CAS que mencionó anteriormente es adecuada para usted (RubyCAS, CASino).

Si puede pagarlo, uno de los proveedores comerciales (como Okta ) es su mejor opción, ya que se mantendrá al tanto de los parches de seguridad y gestionará sus necesidades de autenticación por usted. En particular, si tiene que admitir ActiveDirectory, ya lo implementaron.

OAuth es más útil para la autenticación de terceros, aunque puede hacer SSO. Por lo tanto, si desea admitir los inicios de sesión de Google / Facebook o ser un autenticador de terceros, entonces es una excelente opción. Como no quieres apoyar a Google / Facebook, es probable que OAuth no sea lo que quieres.

Si solo tiene la intención de utilizar HTTP POST para sus necesidades de SSO, entonces la gema ruby-saml podría ser el camino a seguir. Tendría que implementar su propio proveedor de Identidad y agregar un componente de proveedor de servicios a todos sus sitios web (posiblemente en forma de una gema). Parte de lo que necesitaría es una API para actuar como su proveedor de identidades . Esta gem ayuda a escribir API en rieles.

EDITAR

Menciona la posibilidad de que los futuros usuarios de terceros puedan iniciar sesión en su sitio. Esto cambia su cálculo lejos de rodar su propia solución de ruby-saml.

La mejor forma de compartir su API de autenticación es implementar una capa de OAuth . Doorkeeper es una solución popular y se está convirtiendo rápidamente en el estándar para la autenticación de Rails. Su compatibilidad con la comunidad, flexibilidad y facilidad de uso lo convierten en la mejor manera de obtener una API de autenticación de consumibles.

Railscast para la implementación de portero


Servidor CAS :

Una página de inicio de sesión central independiente donde el usuario ingresa sus credenciales (es decir, su nombre de usuario y contraseña).

CAS admite el protocolo SAML 1.1 estandarizado principalmente para admitir el lanzamiento de atributos a los clientes y el inicio de sesión único.

(una tabla en una base de datos SQL, ActiveDirectory / LDAP, cuentas de Google, etc.) Compatibilidad total con el protocolo CAS abierto y multiplataforma (los clientes CAS se implementan para una amplia gama de plataformas, incluyendo PHP, varios frameworks Java, .NET , Zope , etc.) Localización en varios idiomas : el servidor RubyCAS detecta automáticamente el idioma preferido del usuario y presenta la interfaz adecuada.

SAML : Lenguaje de marcado de aserción de seguridad es un formato de datos abierto y basado en XML para intercambiar datos de autenticación y autorización entre partes, en particular, entre un proveedor de identidades y un proveedor de servicios. La autorización SAML es un proceso de dos pasos y se espera que implemente soporte para ambos.

OAuth 2.0 :

El marco de autorización de OAuth 2.0 permite que una aplicación externa obtenga acceso limitado a un servicio HTTP , ya sea en nombre de un propietario de recursos organizando una interacción de aprobación entre el propietario del recurso y el servicio HTTP, o permitiendo que la aplicación de terceros obtener acceso en su propio nombre.

Nota IMPORTANTE :

SAML tiene una característica que carece OAuth2 : el token SAML contiene la información de identidad del usuario (debido a la firma). Con OAuth2, no se obtiene de la caja, y en su lugar, el servidor de recursos necesita hacer un viaje de ida y vuelta adicional para validar el token con el servidor de autorización.

Por otro lado, con OAuth2 puede invalidar un token de acceso en el servidor de autorización y deshabilitarlo para acceder al servidor de recursos.

Ambos enfoques tienen buenas funciones y ambos funcionarán para SSO. Hemos probado ambos conceptos en múltiples idiomas y varios tipos de aplicaciones. Al final del día, OAuth2 parece ajustarse mejor a nuestras necesidades (ya que no existe una infraestructura de SAML existente para utilizar).

OAuth2 proporciona una solución más simple y más estandarizada que cubre todas nuestras necesidades actuales y evita el uso de soluciones para la interoperabilidad con aplicaciones nativas.

¿Cuándo debería usar cuál?

1.Si su caso de uso implica SSO (cuando al menos un actor o participante es una empresa), utilice SAML .

2.Si su caso de uso implica proporcionar acceso (temporal o permanente) a recursos (como cuentas, imágenes, archivos, etc.), utilice OAuth .

3. Si necesita proporcionar acceso a una aplicación de socio o cliente a su portal, utilice SAML .

4.Si su caso de uso requiere una fuente de identidad centralizada, entonces use SAML (proveedor de identidad).

5.Si su caso de uso involucra dispositivos móviles, entonces OAuth2 con algún tipo de token de portador es apropiado.

this , Referencia 2 , Referencia 3