Python API SSO NoneType Error

Bonjour,

Mon environnement : Nuxeo 10.10 Windows 10 Python 3.9

J'essaye actuellement de créer un POC pour la connexion SSO avant de la mettre en place sur la branche dev, je rencontre toutefois quelques problèmes. J'utilise l'API Python de Nuxeo.

*Mon code : *

    auth1 = PortalSSOAuth("Administrator", "nuxeo5secretkey", "MD5")
    auth2 = ("Administrator", "Administrator")
    nuxeo = Nuxeo(auth=auth1)

    print(nuxeo.directories.get('/'))

Erreur : AttributeError: 'NoneType' object has no attribute 'update'

Ce que j'ai remarqué : En regardant dans le code source je remarque cette méthode :

def getattr(object, name, default=None): # known special case of getattr
    """
    getattr(object, name[, default]) -> value

    Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.
    When a default argument is given, it is returned when the attribute doesn't
    exist; without it, an exception is raised in that case.
    """
    pass

qui ne renvoie rien, c'est de là que vien le NoneType. Cette méthode est utilisée dans :

def get_digest_hash(algorithm):
    # type: (Text) -> Optional[HASH]

    # Retrieve the hashlib function for the given digest, None if not found
    print(algorithm)
    print(hashlib)
    func = getattr(hashlib, algorithm, None)
    print(func)
    return func() if func else None

elle même utilisée dans

def make_portal_sso_token(timestamp, random, secret, username, digest_algorithm="md5"):
    # type: (int, Text, Text, Text, Optional[Text]) -> Text
    """Generate a token for SSO with Portals."""
    clear_token = ":".join([str(timestamp), random, secret, username])
    digester = get_digest_hash(digest_algorithm)
    print(digester)
    digester.update(get_bytes(clear_token))
    hashed_token = digester.digest()
    return get_text(b64encode(hashed_token))

NB : Les print viennent de moi

Question Le problème vient-il d'une mauvaise configuration de ma part ou vraiment de la méthode citée ci-dessus ?

1 votes

1 answers

918 views

ANSWER



Bonjour Hugo,

Vous avez raison dans votre analyse, joli travail :)

Le problème vient du fait que vous avez mis l'algorithme en majuscules. Un cas auquel nous n'avons pas pensé et qui sera corrigé dans une prochaine release. En attendant, je vous conseille d'uiliser ce code, en utilisant au maximum les valeurs par défaut :

auth1 = PortalSSOAuth("Administrator", "nuxeo5secretkey")
nuxeo = Nuxeo(host=host, auth=auth1)

Le dernier argument a été mis en place pour le rare cas où Portal SSO serait configuré côté serveur pour utliser un algorithme différent de MD5.

1 votes



D'accord ! merci de la réponse rapide ! J'obtiens toutefois une 401 mais cela doit venir de la configuration de mon SSO alors :/
02/25/2021

JE n'arrive toujours pas à trouver de solution à cette 401, j'ai fait et refait la configuration comme indiqué sur la page : https://doc.nuxeo.com/nxdoc/using-sso-portals/ mais impossible de réussir, il y a un autre article datant de 2019 qui semble concerner le même problème que moi (https://answers.nuxeo.com/general/q/1859e068b1894bd385879b04ba410526/SSO-with-Portal-NUXEO-LTS-2019) il n'y a toutefois pas de réponse, dois-je réouvrir un article ? Mickaël Schoentgen
02/25/2021

La page https://doc.nuxeo.com/nxdoc/using-sso-portals/ est une page d'exemple, notamment concernant l'authentification par défaut. Dans le cadre du client Python avec PortalSSO, il est vraisemblable qu'une configuration semblable à celle de https://github.com/nuxeo/nuxeo-java-client/blob/master/nuxeo-java-client-test/src/test/resources/templates/default/config/javaclient-authentication-chain-config.xml comprenant une specificAuthenticationChain pour les URLs automation, upload et REST API ajoutant PORTAL_AUTH soit nécessaire. Liste minimale d'URLs <url>(.)/automation.</url> <url>(.)/upload.</url> <url>(.)/api/v.</url> (Attention, les astériques et les balises "url"sont ôtées par le formateur) On est alors plus sur un problème de configuration de sécurité côté serveur que Python.
02/25/2021

Super tout marche parfaitement ! j'avais oublié la bonne url ^^
02/25/2021