0

J'apprends l'architecture de microservices et je rassemble des preuves de concepts, mais j'ai déjà atteint un mur.AWS API Gateway pour la communication interprocessus

J'ai créé un service utilisateur hébergé sur Amazon AWS via Lambda avec une passerelle API publique qui vous permet d'interroger la base de données utilisateur. Il est assez simple et ressemble quelque chose comme:

api/[email protected] 

Cette API a l'autorisation qui lui est associée parce que certains utilisateurs sont autorisés à connaître d'autres utilisateurs et certains ne sont pas. Donc, pour certains utilisateurs, cela reviendrait à 404 (ou 403 peut-être) et pour d'autres, ils obtiendraient 200 et le résultat.

Maintenant, je viens d'écrire le service d'authentification qui prend une adresse e-mail et un mot de passe et retourne un jeton. Comment dois-je aborder l'obtention des données utilisateur du service utilisateur? J'adorerais juste appeler l'API REST mais elle a l'autorisation car c'est public. De plus, l'API publique ne retournerait pas le champ de mot de passe (hashed) dont j'aurais besoin.

Ma question:

Dois-je avoir une API séparée, privée pour la communication inter-services qui renvoie toutes les informations ou devrais-je avoir une clé d'autorisation magique que je vous envoie à l'api qui identifie le demandeur comme un service interne et ainsi montrer tout.

question supplémentaire:

Si j'utilise l'API publique avec une magie code auth, devrais-je simplement appeler accèderont par la même URL api publique que mon service côté client utiliserait ou devrais-je appeler quelques-uns amazon interne?

Répondre

1

Je ne suis pas sûr que cette question a une bonne réponse. Mais voici quelques idées:

  1. Etes-vous sûr que vous avez besoin de services d'authentification et d'utilisateur individuels et ne pouvez pas le créer comme une unité? Cela serait plus efficace - en général, les gens essaient d'éviter d'appeler les fonctions lambda à partir des fonctions lambda parce que c'est plus lent et peut être difficile à tester/déboguer.

  2. Si vous avez besoin de communiquer entre lambdas, vous pouvez en appeler un directement plutôt que de passer par la passerelle API en utilisant le SDK de la langue que vous utilisez. Par exemple javascript: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html#invoke-property De cette façon, vous pouvez contrôler l'accès avec des rôles et des stratégies.

  3. Ne pas réinventer la roue. Avez-vous regardé AWS Cognito? http://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html