Django-rest-framework: Nama kunci dalam otorisasi AuthToken

Dibuat pada 28 Apr 2016  ·  3Komentar  ·  Sumber: encode/django-rest-framework

Kunci default untuk TokenAuthorization adalah "Token". Kunci yang paling sering digunakan adalah "Pembawa". Belum lama ini saya mencoba mengganti nama token autentikasi untuk aplikasi REST kita. Saya menemukan kelas TokenAuthentication pada baris 142 di authentication.py. Ini mendefinisikan metode "authenticate_header" yang mengembalikan "Token" jadi saya pikir mungkin untuk mengganti metode ini dan mengembalikan "Pembawa". Tidak, itu tidak mungkin. Saya harus mengganti seluruh kelas hanya untuk mengubah nama token. Apakah saya melewatkan sesuatu? Ini sebenarnya harus ada di file settings.py. Saya tidak tahu apakah ada cara lain untuk mendefinisikan nama token. Jika ada, tolong, beri saya tautan ke dokumen. Jika tidak memungkinkan, saya dapat dengan mudah membuat plugin yang mengambil nama token dari file pengaturan. Metode "authenticate_header" tampaknya tidak digunakan sama sekali. Ini modifikasi saya:

kelas CustomTokenAuthentication(TokenAuthentication):
""" Ubah header otorisasi default menjadi 'Bearer' yang lebih umum.
"""
header_key = b'pembawa'

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"

Komentar yang paling membantu

Saya baru saja menemukan masalah yang sama.

@tomchristie maukah Anda menerima permintaan tarik yang akan menetapkan variabel kelas keyword ke 'Token' di TokenAuthorization , dan menggunakannya di dalam metodenya (bukan hardcoding, seperti yang dilakukan sekarang), sehingga kita dapat melakukan:

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'

?

Semua 3 komentar

Header autentikasi menentukan apakah respons 401 harus digunakan dan jika demikian, nilai apa yang harus dimiliki header WWW-Authenticate .

Jika Anda ingin mengubah perilaku otentikasi token, Anda hanya perlu melakukannya secara eksplisit.

Saya baru saja menemukan masalah yang sama.

@tomchristie maukah Anda menerima permintaan tarik yang akan menetapkan variabel kelas keyword ke 'Token' di TokenAuthorization , dan menggunakannya di dalam metodenya (bukan hardcoding, seperti yang dilakukan sekarang), sehingga kita dapat melakukan:

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'

?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat