Je voudrais commencer par dire que, jusqu’à présent, je n’avais même pas entendu PARLER de SAML, et encore moins développé une stratégie SSO le impliquant. Cela, combiné au fait que je fais à peine un nœud depuis un an, en fait un sandwich novice glorieux. Actuellement, j'ai un client qui utilise SAML et ADFS en tant que fournisseur d'authentification unique. J'utilise déjà passport.js pour les connexions locales, alors utiliser passport-saml semble être le moyen idéal pour implémenter le SSO avec SAML/ADFS. En faisant mes recherches, j'ai trouvé plusieurs guides d'implémentation différents, mais comme je ne connais littéralement RIEN de ce processus, je pourrais utiliser quelques indications.
Dans la documentation passport-saml, j'ai trouvé ce qui suit pour une stratégie qui fonctionnait avec ADFS (d'après la documentation):
{
entryPoint: 'https://ad.example.net/adfs/ls/',
issuer: 'https://your-app.example.net/login/callback',
callbackUrl: 'https://your-app.example.net/login/callback',
cert: 'MIICizCCAfQCCQCY8tKaMc0BMjANBgkqh ... W==',
identifierFormat: null
}
Je suppose que ma principale question est d’où provient ce certificat? Est-ce un certificat que je génère sur mon serveur via SSL? Le fournisseur le fournit-il?
Dans ma recherche, j'ai également trouvé ceci: https://github.com/auth0/passport-wsfed-saml2 , basé sur passport-saml. La configuration suivante est suggérée pour ADFS:
{
path: '/login/callback',
realm: 'urn:node:app',
homeRealm: '', // optionally specify an identity provider
identityProviderUrl: 'https://auth10-dev.accesscontrol.windows.net/v2/wsfederation',
cert: 'MIIDFjCCAf6gAwIBAgIQDRRprj9lv5 ... ='
}
Dans cet exemple, l'objet chemin est évident et mon fournisseur m'a déjà fourni une URL fournisseur. Mais le royaume n’a aucun sens pour moi, et c’est là encore ce sacré cert.
Est-ce que quelqu'un pourrait me fournir un moyen "d'impliquer comme je suis cinq" d'implémenter l'authentification unique SAML/ADFS dans un site node.js? Ou aidez-moi à comprendre clairement les objets d'argument demandés par les deux solutions que j'ai décrites? Très apprécié d'avance!
J'ai récemment suivi le même processus de pensée: n'ayant jamais entendu parler de SAML, je devais permettre à une application Web de s'authentifier via SAML avec OneLogin en tant que fournisseur d'identité (au lieu d'Active Directory).
Au cours de la mise en œuvre, j'ai beaucoup utilisé la documentation de OneLogin et la bibliothèque passport-saml
, que je recommande tous les deux, même si je ne suis pas affilié non plus.
Ce que j’ai compris, c’est que la confusion était triple:
(1) comment fonctionne SAML,
(2) comment fonctionne la bibliothèque passport-saml
dans Node, et
(3) comment configurer le fournisseur d'identité (OneLogin, Active Directory ou autre). Ce qui suit est ma tentative d'explication du type "expliquer comme je suis cinq".
SAML
Le langage SAML (Security Assertion Markup Language) est une norme XML qui permet aux utilisateurs de se connecter en fonction de leur session de navigateur. Il y a beaucoup à faire, mais en gros, cela permet un processus d'authentification plus simple. Un utilisateur peut cliquer sur un bouton plutôt que de soumettre un formulaire avec un nom d'utilisateur et un mot de passe.
Le fonctionnement de SAML est un peu plus complexe. J'ai trouvé cette vue d'ensemble de OneLogin et le diagramme qui l'accompagne utile:
Le diagramme représente le processus suivant:
Node et passport-saml
Passport.js est un middleware d'authentification pour Node. Cela nécessite une stratégie, qui pourrait être quelque chose comme passport-local
ou, dans notre cas, passport-saml
.
Comme la stratégie passport-local
permet l'authentification Passport à l'aide du nom d'utilisateur/mot de passe, la stratégie passport-saml
permet l'authentification Passport à l'aide de la session du navigateur et des valeurs de fournisseur d'identité configurables.
Bien que passport-saml
ait vraiment bien servi mes objectifs, ses documents étaient difficiles à raisonner. L'exemple de configuration ne fonctionne pas car le fournisseur d'identité OpenIdp est inactif et il y a beaucoup de paramètres configurables.
Le principal qui me tenait à cœur: entryPoint
et path
(ou callbackURL
). Je n'avais besoin que de ces deux, qui font ce qui suit:
entryPoint
est l'URL à rediriger avec la demande d'autorisation (voir n ° 2 ci-dessus).path
callbackURL
définir l'URL/route dans Node pour que la réponse SAML soit POSTÉE à (voir N ° 3 ci-dessus).Il existe une multitude d'autres paramètres importants et utiles, mais il est possible de configurer l'authentification unique SAML à l'aide de ces deux éléments seulement.
_/Configuration du fournisseur d'identité
Enfin, le fournisseur d'identité lui-même doit être configuré pour que, dans le cas d'une demande d'autorisation SAML, il sache où envoyer la réponse SAML. Dans le cas de OneLogin, cela signifie que vous définissez une ACS (Consumer) URL
et une ACS (Consumer) URL Validator
, qui doivent correspondre à la path
callbackURL
configurée pour passport-saml.
D'autres éléments peuvent être configurés (pour prendre en charge la déconnexion et d'autres fonctionnalités), mais il s'agit du strict minimum pour s'authentifier.
_/ Résumé
La question initiale comportait deux parties: (1) la mise en œuvre de l'intégration SAML/ADFS et (2) le guide de mise en œuvre SAML node.js de haut niveau. Cette réponse s'adresse à la seconde.
En ce qui concerne l'intégration spécifique à Active Directory, je recommande _ { les documents de passport-saml sur ADFS }, _ _, en gardant à l'esprit qu'il y a deux étapes: configuration de passport-saml pour utiliser un fournisseur d'identité ADFS ET configurer votre serveur ADFS pour qu'il réponde Nœud.
Je peux me tromper ici, mais je crois que cela vient des serveurs XML ADFS trouvés à https://servername/FederationMetadata/2007-06/FederationMetadata.xml
.
Sortez le X509Certificate. J'ai les mêmes problèmes et je vais l'essayer ensuite.
En ce qui concerne la première partie de votre question, le certificat provient du fournisseur. Veuillez consulter la documentation passport-saml .
Extrayez simplement le certificat de signature publique du fournisseur d'identité (X.509) et assurez-vous de le formater au codage PEM. Le certificat codé PEM correctement formaté commence par -----BEGIN CERTIFICATE-----
et se termine par -----END CERTIFICATE-----
.