Tuesday, October 6, 2020

CAS

 CAS : central authorization service

delegation de l'authent


out of the box l'appli welcome joue le role de cas

seule chose à faire : 

- vérifier (c'est le cas) que le cas (provider) a bien dans son controler la fonction

def user():
    """
    ....
    """
    return dict(form=auth())


- pour le consumer (client) sa db doit avoir :

auth = Auth(db, cas_provider='https://login.sklab.cf/user/cas')

et c'est tout ...

utilisation dans le controleur du consumer

from gluon.tools import AuthJWT
myjwt = AuthJWT(auth, secret_key='maclelele')
# la clé sert à déchiffer le token jwt envoyé par le cas provider. fonctionne en mode symétrique. Ce doit etre la même que celle utilisée par le CAS 

# exemple de fonction protégée
# respecter l'ordre des décorateurs

@myjwt.allows_jwt()
@auth.requires_login()
def basic():
    return '%s user_id=%s' % (request.now, auth.user_id)

- le code du  cas est à peine plus riche

from gluon.tools import AuthJWT

auth.settings.allow_basic_login = True
myjwt = AuthJWT(auth, secret_key='maclelele')

# fonction qui authentifie à partir d'un user/mot de passe (basic) et renvoie un token.
# elle sert également à rafraichir le token expiré. Dans ce cas on ne passe pas le user / mot de passe mais le token expiré. ( important pour les apis)

def login_and_take_token():
    myjwt.verify_expiration = False
    return myjwt.jwt_token_manager()
 
implémenté en caliméro ( provider)

et kidem (consumer) sur bobapp

et calimero (consumer) appli welcome

_______________

pour la partie autorisations.

il faut retrouver le nouveau user créé coté client (table auth.user dans kidem) et lui affecter les rôles  (memberships) qui vont bien

REM :

1/  si on change un champ coté CAS ca recrée un user coté client (Kidem)

2/ pas trouvé de moyen de positionner le role en avance de ce fait.


POC - API sur 3 fichiers dans tests/docker/cas/web2py/scripts

get_token.sh :  
# authentifie le user aupres du CAS
# place le token dans un fichier
# puis verifie que l'authent fonctionne sur le consumer (bobapp) avec ce token

get_token2.sh
# utilise le token stocké dans le fichier
# s'authentifie (dans 2 consumers) sans utiliser de password
# tant que le token est valide bien sur

get_token3.sh
# rafraichit le token à partir du précédent qui a expiré
# au bout d'un certain temps il faudra se re authentifier avec login/mot de passe

complément d'info :

https://stackoverflow.com/questions/45627766/web2py-jwt-based-authentication-refresh-token





No comments:

Post a Comment

Ma journée du 01 Décembre 2025

En ce premier jour de décembre, l'heure est venue, De conter une histoire, par les dés soutenue. Quinze dés ont roulé, offrant leur dest...