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