# Auth

Esta clase ofrece métodos de validación de sesión, verificación Tokens y permisos según los roles y permisos establecidos.

  • require_auth_session este decorador de clase, valida que exista una sesión y que el tiempo de expiración de la misma, no haya finalizado. Además utiliza el método validate_token_header para verificar la longitud del token enviado, el tipo de token utilizado (por defecto Bearer, definido en la constante TOKEN_TYPE en el archivo app/config/local_settings.py) y que este Token coincida con el de la variable access_token definida en la sesión. Ejemplo:
from app.ext.security import Auth
...

class ViewApplication(ResourceHandler):
    decorators = [
        Auth.require_auth_session
    ]
  • validate_request este decorador de función, ofrece una forma sencilla, de verificar los campos enviados a traves de un servicio. Ejemplo:
from flask import request
from app.ext.security import Auth
...

@Auth.validate_request("name", "description", "email")
def post(self):
    content = request.get_json()
    name = content.get('name')
    description = content('description')
    email = content.get('email')
    # do stuff
  • create_session este método, crea una nueva sesión, basado en un diccionario enviado como parametro, adicionalmente agrega la siguiente informacion:
Item Value
access_token El nuevo Token generado
expire Tiempo de finalización del Token (por defecto 6 horas)
refresh_token El token utilizado para actualizar el access_token sin comenzar una nueva sessión.
token_type El tipo de Token (por defecto Bearer)

Ejemplo:

from app.ext.security import Auth
...

# added extra info for sesssion
auth_session = {
    "person": {
        "name": user_info.person,
        "email": user_info.email,
    },
    "auth_grants": {
        "role": user_info.role,
        "permissions": roles_perm
    }
}

# generate new session
new_session = Auth.create_session(auth_session)
>>> new_session
{
    "auth_grants": {
        "permissions": [
            "OWNER"
        ],
        "role": "GOD_OF_THE_UNIVERSE"
    },
    "authorization": {
        "access_token": "bphkSovuJApJ43YyaWbICxh9p3LpJG",
        "expire": "Sat, 02 Dec 2017 18:13:26 GMT",
        "refresh_token": "ioEtaSsheLOzw6YjjWJwyhTXslNqJoha5e5rG7jU",
        "token_type": "Bearer"
    },
    "person": {
        "email": "lilith@awesomeapp.com",
        "name": "Lilith Doe"
    }
}

Otras métodos disponibles son:

  • get_current_time este método de clase, obtiene la fecha y hora actual del servidor utilizando el Tiempo Universal Coordinado (UTC) y resta las horas necesarias, de acuerdo a la región del mundo donde nos encontremos, este valor está determinado por la constante STDR_UTC_HOUR ubicada en el archivo app/config/local_settings.py

  • get_expire_time este método de clase, al igual que el anterior, obtiene la fecha y hora actual del servidor y suma el tiempo en segundos (determinado por la constante SESSION_EXPIRE_TIME ubicada en el archivo app/config/local_settings.py) para definir la fecha y hora de finalización de la sesión.

  • get_from_session este método de clase, obtiene un valor especifico de la sesión, para su mejor tratamiento. Ejemplo:

grants = Auth.get_from_session('auth_grants')
role =  grants["role"]

>>>role
GOD_OF_THE_UNIVERSE

# Issues

Para cualquier duda, comentario, sugerencia ó aporte, dirigete a la sección de issues. (opens new window) Antes de abrir un issue nuevo, revisa los ya existentes, en busca de una solución (posiblemente ya planteada) para el problema que se te presenta.