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

IA agentique. bla bla

 Actuellement, l’un des principaux obstacles à la réalisation du plein potentiel des agents d’IA réside dans leur incapacité à communiquer e...