J'ai un serveur API (serveur de ressources) et plusieurs applications, interface graphique Web (SPA) et un client de bureau et peut-être plus à venir. Je voudrais utiliser openid-connect en plus de l'authentification de base HTTP pour mon API Server. Il devrait être configurable quel fournisseur openid utiliser. Mon propre, facebook, google ... Je veux seulement faire l'authentification, je n'ai pas besoin de leur API. J'ai seulement besoin de certaines données de profil comme l'email ou le prénom. Supposons que j'ai configuré google en tant que fournisseur d'identité et que j'utilise actuellement mon interface graphique Web (SPA). Je dois me connecter, pas de problème, selon https://developers.google.com/identity/protocols/OpenIDConnect Je redirige l'utilisateur vers google, obtient mon code d'autorisation et le Web Gui (SPA) obtient un id_token et access_token de google.Utilisation d'openid-connect pour l'authentification spa et repos api
Aucun problème jusqu'à présent, mais maintenant le SPA doit fonctionner avec mon serveur API et le serveur API doit authentifier chaque requête (puisqu'il s'agit d'une api de repos sans état) provenant du client (WebGui SPA) et doit savoir quel utilisateur a réellement fait cela.
A
Ainsi, le access_token de Google est destiné à être utilisé pour accéder au droit de google api? Mais je pourrais également passer ce access_token avec chaque requête à mon serveur api et le serveur api appelle https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=xxx pour vérifier le access_token et obtenir le nom du compte (mail). Mais cela ne semble pas correct, n'est-ce pas?
B
J'ai aussi et id_token que je peux vérifier sans appeler chaque serveur Google. Alors, est-ce que je pourrais juste passer le id_token en tant que porteur avec chaque demande à mon serveur d'api et le serveur d'api peut vérifier le id_token? Mais selon openid-connect spec le access_token est en fait celui qui vient d'être passé au serveur api et le id_token doit rester sur le client. Mais alors le id_token serait complètement inutile pour moi, le serveur API doit savoir qui est l'utilisateur, le client (interface graphique Web) ne s'en soucie pas vraiment.
C
Ou puisqu'il est mon propre API Server, que mon API serveur a réellement besoin pour mettre en œuvre l'ensemble du système oauth2 par lui-même, tout simplement pas l'authentification mais la création access_token et plus encore. Donc j'aurais un/api/tokensign auquel je peux passer l'id_token de google, l'API vérifie le id_token et crée un access_token pour mon WebGUI (SPA). Et ce nouveau access_token peut être passé en tant que support à chaque requête api. Cela semble être la meilleure solution selon les spécifications, mais ai-je vraiment besoin d'implémenter oauth2 par moi-même dans mon API? Cela ressemble à une addition lourde puisque A et B pourraient aussi être implémentés.
Mon repos-api a besoin d'une authentification à chaque requête, alors A, B, C sont-ils la bonne approche? S'il vous plaît, ne me dites pas que c'est basé sur l'opinion, ce n'est pas le cas. Quelle est la bonne façon d'utiliser oauth2/openid-connect pour l'authentification?
merci @KcDoD, je suppose que B ne résoudra pas mon problème puisque oui le id_token n'est pas renouvelable (il peut être fait via prompt = none mais c'est une demande d'authentification chaque fois que id_expired) et toujours selon les spécifications envoyé à un serveur de ressources. Donc, si j'ai une application de bureau, l'application doit renouveler les jetons d'accès qui ne peuvent être faits qu'avec des jetons d'actualisation. – raffis
Donc, ce sera soit A ou C. A est assez simple à implémenter alors que C est assez complexe parce que j'ai besoin d'implémenter tous les flux oauth que je veux, idp id_token exchange, probablement aussi besoin d'enregistrer des clients et plus. Je ne veux pas de produit de tiers. le serveur entier est opensource et il doit être portable. Un avantage majeur par rapport à A est que quelqu'un peut lancer le serveur et que l'API peut jeter un jeton d'accès même si cette personne ne veut utiliser aucun fournisseur openid .... – raffis
Donc, si l'application de bureau est une application de première partie et non idp est utilisé, l'utilisateur peut obtenir des jetons d'accès via le flux du propriétaire de la ressource par un utilisateur/pw. Cela semble plus sûr que d'utiliser l'authentification de base http si aucun fournisseur de connexion openidp ne doit être utilisé, n'est-ce pas? – raffis