2017-06-16 1 views
0

J'ai lu les spécifications OAuth2 encore et encore, mais je ne peux pas comprendre une chose. Le code d'autorisation ne coule-t-il pas sans le secret client (qui est désormais recommandé pour les applications à page unique), car il peut facilement être utilisé pour le phishing? Laissez-moi vous expliquer:OAuth2 sans secret client - Phishing possible?

  1. Le client redirige le propriétaire de ressource vers le serveur d'autorisation, en transmettant l'URL de redirection et l'ID de client.
  2. Le propriétaire de ressource approuve la demande et le serveur d'autorisations le redirige vers l'URL de redirection donnée et transmet le code d'autorisation. Or, en réalité, le client qui a demandé l'autorisation est un site d'hameçonnage que l'utilisateur, malheureusement, n'a pas reconnu. L'URL de redirection transmise au serveur d'autorisations pointe vers le client malveillant, et non vers le client légitime. L'identifiant du client est une information publique, donc la mise en place d'un tel site est assez facile. Que se passe-t-il si le secret client est requis?

    Le client malveillant recevra le code d'autorisation, mais il ne connaît pas le secret client légitime.

  3. Le serveur de ressources refusera d'envoyer un jeton d'accès, car un secret client valide n'a pas été fourni. Les informations de l'utilisateur sont sécurisées.

Mais que se passe-t-il si le serveur de ressources ne nécessite pas le secret client? Le client malveillant recevra le code d'autorisation, et même s'il ne connaît pas le secret client, il demandera un jeton d'accès.

  • Le serveur de ressources acceptera la demande, étant donné qu'un code d'autorisation et un ID de client valides sont fournis et que le secret client n'est pas requis. Le client malveillant obtient le jeton d'accès et les informations de l'utilisateur sont compromises. Est-ce que je manque quelque chose ou est-ce correct et rien ne peut être fait pour rendre plus sûr l'utilisation d'OAuth2 avec des applications d'une seule page?

  • Répondre

    0

    Le serveur de ressources ne nécessite pas de client_secret car seuls les clients valides peuvent obtenir un code d'autorisation.

    Un client doit être validé non seulement pour le client_id mais également pour le redirect_uri enregistré auprès du client. Lors de l'enregistrement d'un client OAuth, vous devez disposer d'une liste des URL redirect autorisées autorisées à être utilisées avec le client_id. Par conséquent, si un client malveillant a fait une requête, la validation échouerait car vous ne devez rediriger que si le redirect_uri est autorisé.

    Ceci est détaillé dans la RFC OAuth 2.0 à la section 3.1.2.2 https://tools.ietf.org/html/rfc6749#section-3.1.2.2