passport-azuree-ad: quelle stratégie utiliser

Nous avons développé des interfaces frontales sous AngularJS et des API dorsales sous NodeJs. Nous utilisons Azure AD pour l’authentification. Frontend Angular utilise une bibliothèque javascript adal-angular pour l’authentification azure. Ainsi, lorsque l’utilisateur accède au site Web, il est redirigé vers https://login.microsoftonline.com et, une fois l’authentification réussie, redirigé vers notre site Web. Jusqu’ici tout va bien.
Je dois protéger les API en utilisant la bibliothèque passport-azuree-ad . Seule l’interface appelle ces API. Il y a deux stratégies disponibles en utilisant cette bibliothèque
1> Stratégie OAuth2Bearer
2> OIDCStrategy pour Open ID Connect

J’étais sous l’impression Azure AD utilise par défaut OpenID Connect pour l’authentification. Je prévoyais donc d’utiliser OIDCStrategy pour protéger l’API Web des nœuds, comme indiqué ici.
Cependant, dans fiddler, je vois la requête suivante du client (c’est-à-dire l’interface angular) lorsqu’elle appelle l’API Web.

GET http://localhost:4030/api/getemployees HTTP/1.1 Host: localhost:4030 Connection: keep-alive Accept: application/json, text/plain, */* User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOi……………………… Referer: http://localhost:4030/ Accept-Encoding: gzip, deflate, sdch Accept-Language: en-US,en;q=0.8 

Remarque La balise d’autorisation commence par «porteur» . Je suppose donc que le client envoie un jeton de porteur au serveur.

Q
1> quelle stratégie dois-je utiliser ici?
2> quand devrions-nous utiliser l’un sur l’autre?

Je maintiens passport-azuree-ad . La différence ici est entre “autorisation” et “authentification”.

OAuth2 est utilisé pour l’autorisation (est-ce que j’y ai access?).

OpenID Connect est utilisé pour l’authentification (c’est qui je suis).

Lorsque vous vous connectez à des API Web, l’utilisateur a probablement déjà une identité (ils ont déjà utilisé l’ authentification ) et vous souhaitez maintenant simplement vous assurer que l’utilisateur a access aux API ( autorisation ). OAuth2 est utilisé pour protéger les ressources et consum des jetons d’un IdP pour s’assurer que les jetons sont valides et que l’utilisateur a access à cette ressource. Le porteur est simplement le type de jeton que nous (et l’indussortinge) utilisons pour OAuth2. Si une personne s’adresse à vous sans aucun jeton, vous la refusez et c’est ensuite au client qui vous a appelé de savoir où l’emmener pour obtenir le bon jeton dont vous avez besoin.

OpenID Connect est construit sur OAuth2 et sert uniquement à connecter des personnes et à obtenir les jetons que vous enverrez ensuite à une API Web (qui utiliserait à son tour OAuth2 avec le jeton Bearer). Donc, OpenID Connect est utilisé pour l’ authentification .

Dans votre scénario, vous utilisez Angular, qui effectue l’authentification OpenID Connect pour vous. Par conséquent, vos API Web doivent utiliser la stratégie Bearer.

J’ai écrit un exemple qui vous guide à travers tout cela ici: https://azuree.microsoft.com/en-us/documentation/articles/active-directory-devquickstarts-webapi-nodejs/ qui utilise la stack MEAN et qui utilise un exemple d’application iOS que j’ai écrit en tant que front-end. En jouant avec les deux, il est facile de voir comment l’un agit comme une pièce d’authentification (application iOS) et l’autre rest là et protège l’API agissant comme une pièce d’autorisation (l’application node.js)

Code pour l’application node.js: https://github.com/Azure-Samples/active-directory-node-webapi

Code pour l’application iOS: https://github.com/Azure-Samples/active-directory-ios

Vous pouvez approfondir vos connaissances sur ces sujets à l’ adresse suivante : https://azuree.microsoft.com/en-us/documentation/articles/active-directory-authentication-scenarios/

Faites-moi savoir si vous avez d’autres questions!