it-swarm.dev

Django-rest-framework'te API için TokenAuthentication nasıl kullanılır

Api oluşturmak için Django-rest-framework'ü kullanan bir Django projem var.

Belirteç temel kimlik doğrulama sistemi kullanmak isteyin, böylece api çağrısı (koy, gönder, sil) yalnızca yetkili kullanıcı için yürütülür.

'Rest_framework.authtoken' kurdum ve her kullanıcı için bir token oluşturdum.

Bu nedenle, şimdi Django.contrib.auth.backends kimlik doğrulamasından, özniteliği olarak auth_token olan kullanıcıyı döndürür. (başarıyla giriş yapıldığında).

Şimdi sorum şu ki, post istek ile belirteci api'ye nasıl gönderebilirim ve api tarafında belirtecin geçerli ve doğru kullanıcıya ait olup olmadığını nasıl doğrulayabilirim?

Uygulanan rest_framework.authtoken uygulamasında, verilen kullanıcıyı ve kartını doğrulamak için herhangi bir yöntem var mı? bulunamadı this / çok faydalı!

Güncelle (yaptığım değişiklikler): Bunu settings.py dosyasına ekledik:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    )
}

Ayrıca başlığımda Token gönderiyor ancak hala çalışmıyor:

if new_form.is_valid:
    payload= {"createNewUser":
              { "users": request.POST["newusers"],
                "email": request.POST["newemail"]
                }
              }

    headers =  {'content-type' : 'application/json', 
                'Authorization': 'Token 6b929e47f278068fe6ac8235cda09707a3aa7ba1'}

    r = requests.post('http://localhost:8000/api/v1.0/user_list',
                      data=json.dumps(payload),
                      headers=headers, verify=False)
31
Peter

"post isteği ile belirteci api'ime nasıl gönderebilirim"

Dokümanlardan ...

İstemcilerin kimliğini doğrulaması için, belirteç anahtarının Yetkilendirme HTTP başlığına dahil edilmesi gerekir. Anahtar, iki dizgiyi birbirinden ayıran beyaz harflerle, "Token" dizgesi tarafından önceden yazılmalıdır. Örneğin:

Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

"api tarafında, simgenin geçerli olup olmadığını ve doğru kullanıcıya ait olup olmadığını nasıl doğrulayabilirim?"

Hiçbir şey yapmanıza gerek yok, kimliği doğrulanmış kullanıcıya geri dönmek için request.user adresine erişmeniz yeterli - REST çerçevesi, herhangi bir yanlış kimlik doğrulamasına "401 Yetkisiz" yanıtı döndürecek.

33
Tom Christie

Sorunuzun ilk yarısına cevap vermek için: 

post isteği ile belirteci api'ime nasıl gönderebilirim

Python request library kullanabilirsiniz. Django-rest-framework TokenAuthentication için, belirtecin başlığa geçirilmesi ve Token dizesi tarafından ön eklenmesi gerekir ( burada )

import requests
mytoken = "4652400bd6c3df8eaa360d26560ab59c81e0a164"
myurl = "http://localhost:8000/api/user_list"

# A get request (json example):
response = requests.get(myurl, headers={'Authorization': 'Token {}'.format(mytoken)})
data = response.json()

# A post request:
data = { < your post data >}
requests.post(myurl, data=data, headers={'Authorization': 'Token {}'.format(mytoken)})
3
elke

Sonunda belirteç kimlik doğrulaması için çalışan Django "rest-auth" paketine sahibim. Bu yardımcı olursa, başarılı bir şekilde giriş yaptıktan ve "auth_token" i aldıktan sonra, benim için çalışan müşteri tarafı jQuery kodu:

var user_url = {API URL}/rest-auth/login
var auth_headers = {
  Authorization: 'Token ' + auth_token
}
var user_ajax_obj = {
  url : user_url,
  dataType : 'json',
  headers: auth_headers,
  success : function(data) {
    console.log('authorized user returned');
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
    console.log('error returned from ' + user_url);
  }
};
$.ajax(
  user_ajax_obj
);
1
Stefan Musarra

Coreapi kullanıyorsanız. Yetkilendirmeyi eklemek için import coreapi auth = coreapi.auth.TokenAuthentication(scheme='Token', token=token_key) yaptınız _ Sonra yapabilirsiniz client = coreapi.Client(auth=auth) response = client.get(my_url)

0
unlockme