Django休息框架浏览api登录与oauth

时间:2014-06-24 12:44:40

标签: python django django-rest-framework

我已经使用djangorestframework创建了一个示例api,它运行良好,我可以使用可浏览的api而没有任何问题。然后我添加了官方网站上提到的outh2身份验证,也运行良好。我可以使用以下来获取访问令牌。

curl -X POST -d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=password&username=YOUR_USERNAME&password=YOUR_PASSWORD" http://localhost:8000/oauth2/access_token/

我也可以使用curl通过使用访问令牌浏览我的api。

但是在使用可浏览的api时我无法浏览我的api,因为可浏览的api既没有得到任何访问令牌也没有使用任何访问令牌。我想我需要登录这个。所以我无法在哪里定制当前登录我必须使用oauth。

2 个答案:

答案 0 :(得分:6)

Web浏览器通常不允许您设置自定义标头,因此您无法提供OAuth令牌。

通常,如果要使用可浏览的API,则需要允许基于会话(即基于cookie的身份验证)。

您可以允许这两种身份验证方法,如果需要,可能会限制会话身份验证以进行开发。

我希望有所帮助。

答案 1 :(得分:3)

我正在使用Django REST Framework,当我安装Django OAuth Toolkit与它一起工作时遇到了同样的问题。要解决此问题,请打开settings.py并确保将REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly', 'rest_framework.permissions.IsAuthenticated', ], 'DEFAULT_AUTHENTICATION_CLASSES': [ 'oauth2_provider.ext.rest_framework.OAuth2Authentication', 'rest_framework.authentication.SessionAuthentication', ], } 添加到“REST_FRAMEWORK”下的“DEFAULT_AUTHENTICATION_CLASSES”条目中。它应该看起来像......

LinkCollection collection = GetLinks(workItemStore, workItemId);

            var query = from link in collection.Cast<WorkItemLinkCollection>()
                        let workItemLink = link.Cast<WorkItemLink>()
                        where workItemLink.LinkTypeEnd.LinkType.ReferenceName.ToLower() != "system.linktypes.dependency"
                        select link;

有了这个设置,您应该能够查看可浏览的API,甚至可以通过使用Django的会话身份验证登录来执行POST请求。