Django-rest-framework: Nome da chave na autorização AuthToken

Criado em 28 abr. 2016  ·  3Comentários  ·  Fonte: encode/django-rest-framework

A chave padrão para TokenAuthorization é "Token". A chave mais usada é "Portador". Não muito tempo atrás, tentei alterar o nome do token de autenticação para nosso aplicativo REST. Encontrei a classe TokenAuthentication na linha 142 em authentication.py. Ele define o método "authenticate_header" que retorna "Token", então pensei que é possível substituir esse método e retornar "Bearer". Não, não é possível. Tive que substituir a classe inteira apenas para alterar o nome do token. Senti falta de algo? Na verdade, deve estar no arquivo settings.py. Não sei se existe outra maneira de definir o nome do token. Se houver, por favor, me dê o link para os documentos. Se não for possível, eu poderia facilmente criar um plugin que leva o nome do token do arquivo de configurações. O método "authenticate_header" parece não ser usado. Esta é a minha modificação:

classe CustomTokenAuthentication (TokenAuthentication):
"" "Modifique o cabeçalho de autorização padrão para 'Portador' muito mais comum.
"" "
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"

Comentários muito úteis

Acabo de encontrar o mesmo problema.

@tomchristie , você aceitaria uma solicitação pull que keyword class para 'Token' em TokenAuthorization e a usaria dentro de seus métodos (em vez de codificá-la, como é feito agora), então podemos fazer:

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 comentários

O cabeçalho de autenticação determina se uma resposta 401 deve ser usada e, em caso afirmativo, qual valor o cabeçalho WWW-Authenticate deve ter.

Se você quiser alterar o comportamento da autenticação de token, precisará apenas fazer isso explicitamente.

Acabo de encontrar o mesmo problema.

@tomchristie , você aceitaria uma solicitação pull que keyword class para 'Token' em TokenAuthorization e a usaria dentro de seus métodos (em vez de codificá-la, como é feito agora), então podemos fazer:

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'

?

Esta página foi útil?
0 / 5 - 0 avaliações