Projet

Général

Profil

Bug #7866

Erreur lors de la vérification de la signature d'un API user

Ajouté par Serghei Mihai il y a presque 9 ans. Mis à jour il y a plus de 8 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
16 juillet 2015
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

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

Révision bfec6d12 (diff)
Ajouté par Serghei Mihai il y a plus de 8 ans

fix key type in request signing (#7866)

Tests for anonymous and signed api access added

Historique

#1

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.

#2

Mis à jour par Serghei Mihai il y a presque 9 ans

Le voici

#3

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).

#4

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.

#6

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.".

#7

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

#8

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0001-fix-key-type-in-request-signing-7866.patch supprimé
#10

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
#11

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF