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"
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'
?
Comentários muito úteis
Acabo de encontrar o mesmo problema.
@tomchristie , você aceitaria uma solicitação pull que
keyword
class para'Token'
emTokenAuthorization
e a usaria dentro de seus métodos (em vez de codificá-la, como é feito agora), então podemos fazer:?