CAS vs. SAML vs. OAuth2

avant que vous ne me posiez pour poser une question trop basique sans faire de devoirs, j'aimerais dire que j'ai fait beaucoup de lecture sur ces sujets, mais je suis encore confus.

mes besoins semblent assez simples. Dans mon entreprise, On a un tas d'applications Ruby on Rails. Je veux construire un service d'authentification SSO que toutes ces applications devraient utiliser.

essayer de faire quelques recherches sur la façon de faire ceci, j'ai lu à propos CAS , SAML et OAuth2 . (Je sais que le "Auth" dans OAuth signifie autorisation, et non authentification, mais j'ai lu assez d'articles disant Comment OAuth peut être utilisé pour authentification juste amende - ce est l'un d'eux.)

est-ce que quelqu'un pourrait me dire en termes simples ce que ces 3 sont? Sont-elles des alternatives (concurrentes)? Est-il même le droit d'être les comparer?

et il y a tant de gemmes qui semblent toutes être dire des choses très similaires:

  • https://github.com/rubycas/rubycas-server et https://github.com/rubycas/rubycas-client
  • https://github.com/nbudin/devise_cas_authenticatable
  • https://github.com/onelogin/ruby-saml
  • CASino et https://github.com/rbCAS/casino-activerecord_authenticator
  • et je suis sûr qu'il y a des centaines de gemmes OAuth related.

je veux juste une application Rails séparée qui gère toute l'authentification pour mes autres applications Rails.

Note: Je ne veux pas permettre aux utilisateurs d'utiliser leurs comptes Google / Facebook pour se connecter. Nos utilisateurs ont déjà des comptes sur notre site. Je les veux pour être en mesure de se connecter en utilisant ce compte une fois et être en mesure d'accéder à toutes nos applications sans se connecter à nouveau. S'inscrire dans une application devrait les signer hors de toutes les applications.

mise à JOUR

je suis tombé sur ces deux solutions Sauth:

  • http://dev.mikamai.com/post/110722727899/oauth2-on-rails
  • http://blog.yorkxin.org/posts/2013/11/05/oauth2-tutorial-grape-api-doorkeeper-en /

ils semblent décrire quelque chose de très similaire à ce que je veux. Mais je n'ai pas trouvé de guide / blog post / tutoriel montrant comment faire cela avec SAML / CAS.

les Suggestions sont les bienvenues.

UPDATE 2

plus de détails à propos de notre étui.

nous il n'y a pas d'architecture SAML en place. Principalement, ce seront nos utilisateurs (inscrits directement sur notre site web) qui vont accéder à toutes nos applications. À l'avenir, il se peut que nous ayons des entreprises tierces (partenaires) qui appellent nos IPA. Il se peut également que des utilisateurs de ces entreprises tierces (partenaires) (inscrites sur leurs sites web) accèdent à nos applications.

36
demandé sur Anjan 2015-03-14 22:31:57

5 réponses

si vous avez besoin d'authentifier pour LDAP ou ActiveDirectory alors une solution comme l'un des CAS gemmes vous avez mentionné ci-dessus est bon pour vous (RubyCAS, CASino).

si vous pouvez vous le permettre, l'un des vendeurs commerciaux (comme Okta ) est votre meilleure option parce qu'ils resteront au courant des correctifs de sécurité et géreront vos besoins d'authentification pour vous. En particulier, si vous devez supporter ActiveDirectory, ils l'ont déjà implémenté.

OAuth est le plus utile pour l'authentification de tiers, bien qu'il puisse faire SSO. Donc, si vous souhaitez soutenir Google / Facebook logins ou être un tiers authentificateur, alors il est un grand choix. Puisque vous ne voulez pas soutenir Google / Facebook, alors OAuth n'est probablement pas ce que vous voulez.

si vous avez uniquement l 'intention d' utiliser HTTP POST pour vos besoins SSO alors le ruby-saml gem pourrait être la voie à suivre. Vous devez mettre en œuvre votre propre Fournisseur D'identité et Ajouter un fournisseur de services composante à tous vos sites web (éventuellement sous forme de gemme.) Une partie de ce dont vous avez besoin est d'une api de rails pour agir comme votre identity provider . Ce gem aide à soutenir l'écriture API dans les rails.

MODIFIER

vous mentionnez la possibilité que de futurs utilisateurs tiers pourraient se connecter à votre site. Cela change votre calcul loin de rouler votre propre solution de ruby-saml.

la meilleure façon de partager votre authentification API est d'implémenter une couche outh . portier est une solution populaire et est rapide devenir la norme pour l'authentification des Rails. Son support communautaire, sa flexibilité et sa facilité d'utilisation en font la meilleure solution pour une API d'authentification consommable.

Railscast pour la mise en œuvre de portier

11
répondu Uri Mikhli 2015-06-05 15:14:14

CAS-Server :

une page centrale de connexion autonome où l'utilisateur entre ses données d'identification (c.-à-d. son nom d'utilisateur et son mot de passe).

CAS supporte le protocole SAML 1.1 standardisé principalement pour supporter attribuez la mainlevée aux clients et une seule sortie.

(une table dans une base de données SQL, ActiveDirectory/LDAP, Google accounts, etc.) Compatibilité totale avec le ouvert, multi-plate-forme CAS protocole (CAS clients sont mis en œuvre pour une large gamme de plates-formes, y compris PHP, divers cadres Java, .NET , Zope , etc.) localisation multi-langues -- RubyCAS-Server détecte automatiquement la langue préférée de l'utilisateur et présente l'interface appropriée.

enter image description here

SAML : Le langage de balisage D'Assertion de sécurité est Format de données open-standard basé sur le XML pour l'échange de données d'authentification et d'autorisation entre les parties, en particulier entre un fournisseur d'identité et un fournisseur de services. L'autorisation SAML est un processus en deux étapes et vous êtes censé mettre en œuvre un support pour les deux.

enter image description here

outh 2.0 :

le cadre d'autorisation OAuth 2.0 permet une tiers demande pour obtenir un accès limité à un service HTTP , soit le pour le compte d'un propriétaire de ressource en orchestrant une interaction d'approbation entre le propriétaire de la ressource et le service HTTP, ou en demande d'accès par un tiers pour son propre compte.

enter image description here

Note Importante:

SAML a une caractéristique que OAuth2 manque : le jeton SAML contient les informations d'identité de l'utilisateur (en raison de la signature). Avec OAuth2, vous n'obtenez pas cela de la boîte, et au lieu de cela, le serveur de ressources doit faire un aller-retour supplémentaire pour valider le token avec le serveur D'autorisation.

, d'autre part, avec OAuth2 vous pouvez invalider un jeton d'accès sur le Serveur d'Autorisation, et le désactiver d'autres accès au serveur de ressources.

les deux approches ont de belles caractéristiques et les deux fonctionneront pour le SSO. Nous avons testé les deux concepts dans plusieurs langues et dans différents types d'applications. En fin de compte, OAuth2 semble mieux répondre à nos besoins (puisqu'il n'y a pas d'infrastructure SAML existante à utiliser).

OAuth2 fournit une solution plus simple et plus standardisée qui couvre l'ensemble de nos besoins actuels et évite l'utilisation de solutions de rechange pour l'interopérabilité avec les applications natives.

Quand dois-je utiliser lequel?

1.Si votre usecase implique SSO (lorsqu'au moins un acteur ou un participant est une entreprise), alors utilisez SAML .

2.Si votre usecase implique de fournir un accès (temporaire ou permanent) à des ressources (telles que des comptes, des images, des fichiers, etc.), alors utilisez outh .

3.Si vous avez besoin de fournir l'accès à un partenaire ou une application client à votre portail, puis utiliser SAML .

4.Si votre usecase nécessite une source d'identité centralisée, utilisez SAML (Fournisseur D'identité).

5.Si votre usecase implique des appareils mobiles, alors OAuth2 avec une certaine forme de jetons au porteur est approprié.

enter image description here

Référence 1 , Référence 2 , Référence 3

38
répondu EnggForum 2017-05-23 12:34:37

Anjan.

j'ai utilisé CAS et OAuth dans mon travail. Voici quelques-unes de mes opinions, et j'espère vous aider.

en gros

  • les deux CAS et SAML visent à résoudre la situation de SSO. Et CAS est un service ou un système d'authentification, qui peut prendre en charge le protocole SAML.
  • OAuth vise à résoudre les problèmes d'autorisation et d'authentification.

et dans la pratique,

  • les deux CA et SAML agissent comme une passerelle devant un groupe d'applications qui appartiennent à une seule organisation. Tout comme dans votre cas.
  • OAuth est utilisé pour autoriser et authentifier entre différentes organisations.

Juste mes pensées, et l'espoir d'entendre d'autres voix.

8
répondu ifyouseewendy 2015-06-02 08:36:48

nous avons utilisé CAS et SAML dans notre architecture (application Mobile, portail en ligne, et MicroServices) et tous les deux sont utilisés à des fins différentes. Notre portail en ligne est comme les services bancaires en ligne qui fonctionnent dans le domaine public et doit être sécurisé. Nous ne voulons pas stocker de mot de passe et autres tokens sécurisés dans la base de données du portail en ligne, par conséquent, nous utilisons CAS pour l'authentification et l'autorisation. Lors de l'enregistrement, lorsque l'utilisateur choisit le mot de passe, nous enregistrons le mot de passe dans les SAE et stockons le mot de passe correspondant jeton dans la base de données du Portail

Lorsque l'utilisateur se connecte la prochaine fois, l'utilisateur entre le nom d'utilisateur et le mot de passe dans le portail. Portal récupère le token correspondant à l'utilisateur à partir de DB et envoie User_name, password, et token à CAS Pour validation.

Mais, dans le cas où l'utilisateur s'est déjà connecté dans une application et nous redirigeons l'utilisateur vers notre autre application, alors nous ne voulons pas de l'utilisateur pour entrer le nom d'utilisateur et le mot de passe à nouveau pour la deuxième application. On utilise SAML pour résoudre ça. La première application partage les détails de l'utilisateur avec le serveur SAML et obtient le token en retour. Première application passe le jeton à la deuxième application. La deuxième application envoie le token au serveur SAML pour obtenir des détails d'utilisateur et sur le succès l'utilisateur de terres à la page désirée. Notre première application peut être mobile App et la deuxième peut être portail dans le scénario D'App2Web.

1
répondu 2017-09-20 09:49:32

puisque vous avez beaucoup de réponses à cette question, je voudrais vous proposer un produit d'identité qui peut être répondre à ce genre de tous les protocoles dans une main avec beaucoup de caractéristiques d'authentification et de gestion de l'utilisateur. Vous pouvez simplement essayer la version du serveur D'identité WSO2 pour cela.

0
répondu Harsha 2016-11-03 03:10:06