Disons que j'ai créé ma propre application. Nous avons l'interface de réaction et l'API RESTful en tant que backend et nous utilisons Google OAuth pour l'autorisation de nos utilisateurs. Le front-end fait des appels aux API. Le serveur frontal utilise le flux de code d'autorisation d'OAuth. Après avoir obtenu le jeton d'accès du serveur Google OAuth, le serveur frontal utilise ce jeton pour passer des appels vers mon backend.

Désormais, l'utilisateur malveillant obtiendra l'URL de mon API, d'autres informations requises pour l'API REST à partir de l'onglet Réseau Chrome et pourra appeler directement les API avec un jeton d'accès.

Questions:

How will my REST API know from where the request is coming?

Also how it will validate the access token?

Is it possible once User got all information about my REST API, it can call directly with fake access token?

J'ai regardé dans le diagramme pour le flux de code d'autorisation. Ci-dessous le lien. https://docs.microsoft.com/ fr-fr / azure / active-directory / develop / v2-app-types

But how will web api validate the token?

Veuillez me guider si je manque d'informations.

0
Shrirang 29 août 2020 à 15:20

2 réponses

Meilleure réponse

Le serveur OAuth de Google émettra à votre front-end un jeton Web JSON (JWT). Ce jeton est gravé par la clé privée de Google. Votre API doit:

  1. Obtenez la clé publique de Google et
  2. Vérifiez la signature du JWT.

Si cela est valide, le jeton provient de Google. Sinon, il ne vient pas de Google ou a été falsifié.

Après cela, votre API doit effectuer quelques vérifications supplémentaires:

  • Vérifiez l'heure d'expiration et voyez que ce n'est pas dans le passé. Cela se trouve dans la revendication exp.
  • Vérifiez que le jeton ne provient pas uniquement de Google, mais de votre API. Cela peut être fait en examinant la revendication aud (audience) et en constatant que c'est pour vous.
  • Vérifiez quand le jeton a été émis et assurez-vous que ce n'est pas dans le futur. L'heure d'émission est indiquée dans la revendication iat.
  • Vérifiez que vous devriez déjà commencer à l'utiliser et qu'il n'y avait pas une sorte d'embargo sur la période d'utilisation. Cela sera indiqué dans la revendication non antérieure (nbf).
  • Vérifiez que le type de jeton est un jeton d'accès (par opposition à un jeton d'identification).

(Vous pouvez trouver une description plus détaillée dans ce guide .)

Si vous faites ces choses, vous pouvez être sûr que Google a émis le jeton et qu'il était destiné à votre API. Cela n'indique pas à votre API que l'appelant était votre front-end. La raison en est que le jeton est un «jeton porteur», ce qui signifie que le jeton est lié uniquement à celui qui le porte ou le présente . Pour vous assurer que seule votre application fournit le jeton, vous en avez besoin pour prouver la possession d'une clé privée. Cela n'est pas possible lorsque vous utilisez Google comme émetteur de jetons (à ma connaissance).

1
Travis Spencer 29 août 2020 à 13:11

Ma question est essentiellement de savoir comment mon api de repos valide l'intégrité du jeton. J'ai trouvé le lien: https://developers.google.com/identity / sign-in / android / backend-auth

1
Shrirang 29 août 2020 à 13:21