Bug #7866
Erreur lors de la vérification de la signature d'un API user
0%
Description
Arrivé sur la plateforme de dev de Fontenay:
Internal Server Error: /teamnet-axel/fsb/family/ Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python2.7/dist-packages/passerelle/urls_utils.py", line 52, in f return func(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 69, in view return self.dispatch(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py", line 87, in dispatch return handler(request, *args, **kwargs) File "/usr/lib/python2.7/dist-packages/passerelle/utils.py", line 123, in _wrapped_view if not is_authorized(request, obj, perm): File "/usr/lib/python2.7/dist-packages/passerelle/utils.py", line 113, in is_authorized return set(users).intersection(get_request_users(request)) File "/usr/lib/python2.7/dist-packages/passerelle/utils.py", line 83, in get_request_users if check_query(query, signature_user.key): File "/usr/lib/python2.7/dist-packages/passerelle/base/signature.py", line 62, in check_query return check_string(unsigned_query, signature, key, algo=algo) File "/usr/lib/python2.7/dist-packages/passerelle/base/signature.py", line 66, in check_string signature2 = sign_string(s, key, algo=algo) File "/usr/lib/python2.7/dist-packages/passerelle/base/signature.py", line 43, in sign_string hash = hmac.HMAC(key, digestmod=digestmod, msg=s) File "/usr/lib/python2.7/hmac.py", line 72, in __init__ self.outer.update(key.translate(trans_5C)) TypeError: character mapping must return integer, None or unicode
Réproduit également dans un shell python avec la clé en unicode.
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a presque 9 ans
Ça se prêterait très bien à l'ajout d'un test.
Mis à jour par Serghei Mihai il y a presque 9 ans
- Fichier 0001-fix-key-type-in-request-signing-7866.patch 0001-fix-key-type-in-request-signing-7866.patch ajouté
- Assigné à mis à Serghei Mihai
Le voici
Mis à jour par Frédéric Péters il y a presque 9 ans
Il y a déjà une infra de tests dans tests/, il faudrait l'utiliser. (par ailleurs j'imaginais plutôt un test montant au moins jusqu'au is_authorized).
Mis à jour par Serghei Mihai il y a plus de 8 ans
Tests d'accès à l'api d'un connecteur en mock
-ant la réponse.
Mis à jour par Serghei Mihai il y a plus de 8 ans
- Fichier 0001-fix-key-type-in-request-signing-7866.patch 0001-fix-key-type-in-request-signing-7866.patch ajouté
avec le patch
Mis à jour par Frédéric Péters il y a plus de 8 ans
Perso j'ai plutôt tendance à organiser les choses différemment; ici l'objectif que je mettais était de monter jusqu'à is_authorized(), et d'en tester des variations, j'aurais utilisé un accès direct pour créer et faire varier l'environnement des objets (càd que j'aurais instancié un objet ApiUser plutôt que le créer via l'interface web, j'aurais instancié un connecteur, de la même façon).
Et les tests auraient donc été des variations autour de is_authorized, par exemple :
- Accès anonyme (présent dans ton test)
- ApiUser avec keytype à SIGN (comme ton test), accès avec bonne signature, accès avec mauvaise signature
- ApiUser avec keytype à SIGN, accès avec de l'authent HTTP
- ApiUser avec keytype à API, bonne clé, mauvaise clé
- ApiUser sans keytype (et donc succès)
- ApiUser avec restriction d'IP
Aussi, aujourd'hui, sans passer par mock, il y a moyen de distinguer l'erreur d'authent en utilisant un connecteur SMS. (en passant un mauvais payload).
Pour ce ticket, je dirais que j'aimerais bien voir le test_api_access.py avec deux tests, qui instancient un environnement, et qui aurait deux tests, pour reprendre ma liste "Accès anonyme", "ApiUser avec keytype à SIGN, accès avec bonne signature.".
Mis à jour par Serghei Mihai il y a plus de 8 ans
- Fichier 0001-fix-key-type-in-request-signing-7866.patch ajouté
Ok.
Je fais un ticket séparé pour rajouter les autres tests
Mis à jour par Serghei Mihai il y a plus de 8 ans
- Fichier
0001-fix-key-type-in-request-signing-7866.patchsupprimé
Mis à jour par Serghei Mihai il y a plus de 8 ans
Mis à jour par Serghei Mihai il y a plus de 8 ans
- Statut changé de Nouveau à Résolu (à déployer)
commit bfec6d12555aea171e71a921de9f50155e7f420d Author: Serghei Mihai <smihai@entrouvert.com> Date: Wed Jul 29 10:06:51 2015 +0200 fix key type in request signing (#7866) Tests for anonymous and signed api access added
fix key type in request signing (#7866)
Tests for anonymous and signed api access added