Django-rest-framework: Nombre de clave en la autorización AuthToken

Creado en 28 abr. 2016  ·  3Comentarios  ·  Fuente: encode/django-rest-framework

La clave predeterminada para TokenAuthorization es "Token". La clave más utilizada es "Portador". No hace mucho intenté cambiar el nombre del token de autenticación para nuestra aplicación REST. Encontré la clase TokenAuthentication en la línea 142 en authentication.py. Define el método "authenticate_header" que devuelve "Token", así que pensé que es posible anular este método y devolver "Bearer". No, no es posible. Tuve que anular toda la clase solo para cambiar el nombre del token. ¿Me he perdido algo? Esto debería estar en el archivo settings.py. No sé si hay otra forma de definir el nombre del token. Si lo hay, por favor, dame un enlace a los documentos. Si no es posible, podría crear fácilmente un complemento que tome el nombre del token del archivo de configuración. El método "authenticate_header" parece no utilizarse en absoluto. Esta es mi modificación:

clase CustomTokenAuthentication (TokenAuthentication):
"" "Modificar el encabezado de autorización predeterminado a un 'Portador' mucho más común.
"" "
header_key = b'bearer '

def authenticate(self, request):
    auth = get_authorization_header(request).split()

    if not auth or auth[0].lower() != self.header_key:
        return None

    if len(auth) == 1:
        msg = _('Invalid token header. No credentials provided.')
        raise exceptions.AuthenticationFailed(msg)
    elif len(auth) > 2:
        msg = _(
            'Invalid token header. Token string should not contain spaces.'
        )
        raise exceptions.AuthenticationFailed(msg)

    try:
        token = auth[1].decode()
    except UnicodeError:
        msg = _(
            'Invalid token header. Token string should not contain',
            'invalid characters.'
        )
        raise exceptions.AuthenticationFailed(msg)

    return self.authenticate_credentials(token)

def authenticate_header(self, request):
    return "Bearer"

Comentario más útil

Acabo de encontrarme con el mismo problema.

@tomchristie , ¿aceptaría una solicitud de extracción que establecería keyword variable de clase en 'Token' en TokenAuthorization , y la usaría dentro de sus métodos (en lugar de codificarla, como se hace ahora), entonces podemos hacer:

class BearerAuthentication(authentication.TokenAuthentication):
    '''
    Simple token based authentication using utvsapitoken.

    Clients should authenticate by passing the token key in the 'Authorization'
    HTTP header, prepended with the string 'Bearer '.  For example:

        Authorization: Bearer 956e252a-513c-48c5-92dd-bfddc364e812
    '''
    keyword = 'Bearer'

?

Todos 3 comentarios

El encabezado de autenticación determina si se debe usar una respuesta 401 y, de ser así, qué valor debe tener el encabezado WWW-Authenticate .

Si desea cambiar el comportamiento de la autenticación del token, solo tendrá que hacerlo explícitamente.

Acabo de encontrarme con el mismo problema.

@tomchristie , ¿aceptaría una solicitud de extracción que establecería keyword variable de clase en 'Token' en TokenAuthorization , y la usaría dentro de sus métodos (en lugar de codificarla, como se hace ahora), entonces podemos hacer:

class BearerAuthentication(authentication.TokenAuthentication):
    '''
    Simple token based authentication using utvsapitoken.

    Clients should authenticate by passing the token key in the 'Authorization'
    HTTP header, prepended with the string 'Bearer '.  For example:

        Authorization: Bearer 956e252a-513c-48c5-92dd-bfddc364e812
    '''
    keyword = 'Bearer'

?

¿Fue útil esta página
0 / 5 - 0 calificaciones