2016-09-24 83 views
2

讓我告訴你我的代碼第一:如果使用'AllowAny'權限類,如何防止Django Rest Framework驗證令牌?

settings.py

.... 
DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.TokenAuthentication', 
), 
'DEFAULT_PERMISSION_CLASSES': (
    'rest_framework.permissions.IsAuthenticated', 
) 
.... 

my_view.py

@api_view(['POST']) 
@permission_classes((AllowAny,)) 
def say_hello(request): 
    return Response("hello") 

正如你所看到的,我使用的令牌認證通過保護我的其他的API默認,但當我添加令牌標頭say_hello,Django Rest Framework也將檢查令牌是否有效,即使當我添加AllowAny權限類。

我的問題是如何使Django Rest Framework忽略檢查令牌如果令牌頭存在於say_hello? 是否有任何安全方面的考慮?

謝謝。

+0

您似乎在混淆驗證和授權.. – wim

+0

@wim不,我不是,但也許我的問題不夠清楚,我會更新問題。 –

回答

1

你似乎在混淆身份驗證授權

通過在您的視圖上使用@permission_classes修飾符,您已覆蓋設置的默認授權。但是您仍然擁有來自設置的默認身份驗證類。

嘗試也添加到您的另外一個裝飾,繞過TokenAuthentication

@authentication_classes([]) 

請注意,如果你把這個在POST終點,你的應用程序現在受制於像跨站請求僞造骯髒的東西。

+0

OMG,這很簡單,我感覺自己不好:)))))) –

+0

順便說一下在Allow_classes中使用AllowAny和使用空列表有什麼不同? –

+1

沒有區別。 'AllowAny'只是顯式的(自我評論代碼) – wim

0

我認爲this question的答案也適用於此處。

如果您不想檢查一個視圖的標記,則可以將@authentication_classes([])添加到視圖中。這應該保留其他視圖的默認設置,同時對其進行不同的處理。

相關問題