2014-07-21 43 views
15

Her iki harika aracı da DRF ve Django-REST-Swagger kullanıyorum, ancak API görünümlerimden birkaçı belirteç kimlik doğrulaması kapsamında.token auth to swagger + django rest framework nasıl eklenir?

Şimdi API'mın swagger doc sayfamıza Token başlığı dahil olmak üzere bu jeton auth api urllerini test etme imkanını eklemek istiyorum. Bunu nasıl yapabilirim?

benim sınıf API bakış bir anlık şu şekildedir: Swagger oto bir sürü şey algılar

class BookList(APIView): 
    """ 
    List all books, or create a new book. 
    """ 
    authentication_classes = (TokenAuthentication,) 
    permission_classes = (IsAuthenticated,) 
    ... 

beri, yaklaşık belirteç kimlik doğrulama fark ve bana yaklaşık jetonu veya kullanıcı kimliği sormaya bekliyordum onun web arayüzü, ama değil. Bu nedenle, CURL komutları üzerinden manuel olarak test ediyorum ...

cevap

9

Çalıştığımdan beri kendime cevap veriyorum.

Aslında Swagger ayarları bu için bir seçenek vardır, api_key - Bana göre>

SWAGGER_SETTINGS = { 
    "exclude_namespaces": [], # List URL namespaces to ignore 
    "api_version": '0.1', # Specify your API's version 
    "api_path": "/", # Specify the path to your API not a root level 
    "enabled_methods": [ # Specify which methods to enable in Swagger UI 
     'get', 
     'post', 
     'put', 
     'patch', 
     'delete' 
    ], 
    "api_key": '', # An API key 
    "is_authenticated": False, # Set to True to enforce user authentication, 
    "is_superuser": False, # Set to True to enforce admin only access 
} 

o belli değildi, ama sadece giriş test kullanıcı için geçerli bir belirteci ettik ve kimlik denetimiyle çalıştı Eğer belirteç kimlik doğrulaması kullanıyorsanız

+0

Çalışmayı başaramadım. Tüm görüşlerim IsAuthenticated permission_class. Oturum, Basic ve Token kimlik doğrulaması kullanıyorum. API anahtarı nasıl eklenir ve nerede bulunur? – aRkadeFR

+1

@aRkadeFR, SWAGGER_SETTINGS içindeki 'api_key' alanıyla, benimki bu => "api_key" ile benzer: 'fasd12d1a7 ........ c26f34r2f', – miguelfg

15

:-) gerekli görünümleri, sen Temelde this question

bakmak isteyebilirsiniz, sadece settings.py için bu eklemeniz gerekir:

SWAGGER_SETTINGS = { 
    'SECURITY_DEFINITIONS': { 
     'api_key': { 
      'type': 'apiKey', 
      'in': 'header', 
      'name': 'Authorization' 
     } 
    }, 
} 

Swagger UI sayfanızda Authorize düğmesini görmeniz gerekir. Bunu tıklayın ve giriş metni alanına Yetkilendirme değerini girin.

+0

Çekicilik gibi çalışır, kullanmam gerekiyordu "name: Auth -Token " –

+0

Benim için işe yaramadı. Hem Auth-Token hem de Yetkilendirme çalıştı. – Arvind

5

Sorunum, TokenAuthentification etkinleştirildikten sonra benim api URL'lerinin bir AuthentificationError nedeniyle swagger UI'sinde gösterilmemesiydi. Benim için
çözüm Django istirahat Çerçeve Ayarlar hem authentaction sınıfları aktif hale getirmek için oldu:
SessionAuthentification -> Swagger UI
TokenAuthentification için -> Dinlenme Müşteriler

REST_FRAMEWORK = { 
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',), 
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.TokenAuthentication', 
    'rest_framework.authentication.SessionAuthentication' 
) 

} için

4

Şema görünümünün AllowAny'den izin alması gerekiyor. Bu, eklentinin, kullanıcının kimliği doğrulanmadan önce hangi son noktaların kullanılabildiğini görmesini sağlar. Doğru kurulursa uç noktalar hala korunmalıdır. Örnek:

@api_view() 
@renderer_classes([SwaggerUIRenderer, OpenAPIRenderer, renderers.CoreJSONRenderer]) 
@authentication_classes((TokenAuthentication, SessionAuthentication)) 
@permission_classes((AllowAny,)) 
def schema_view(request): 
    generator = schemas.SchemaGenerator(
     title='My API end points', 
     patterns=my_urls, 
     url="/api/v1/") 
    return response.Response(generator.get_schema(request=request)) 

O SessionAuthentication kaldırıp sadece TokenAuthentication kullanmak en iyisidir ama bu tercih meselesi olduğunu, burada ben

REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': [ 
     'rest_framework.permissions.IsAuthenticated' 
    'DEFAULT_AUTHENTICATION_CLASSES': (
     'rest_framework.authentication.TokenAuthentication' 
) 

o yüklediğiniz uygulamalardan içine 'rest_framework.authtoken' eklemek emin olun kaldırdık ve artık gerekli olmayacağı için orta sınıf sınıflarından CsrfViewMiddleware'u kaldırın.Ve çalım olması güzel olan yanı komutları

SWAGGER_SETTINGS = { 
    'SECURITY_DEFINITIONS': { 
     'api_key': { 
      'type': 'apiKey', 
      'in': 'header', 
      'name': 'Authorization' 
     } 
    }, 
    'USE_SESSION_AUTH': False, 
    'JSON_EDITOR': True, 
} 

Bu yapacaktır dayı örneği kıvrılma tüm jetonu doldurmak ayarları. Oturumu gerçekleştirme yetkisini yerinde bırakmak bunu devre dışı bırakır.

Swagger yetkilendirme iletişim kutusu, sağlanacak olan api_key numarasını ister. Bunu geliştiremiyor gibi görünmüyorsa, bu yazıyı günceller.

İlgili konular