首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Django Scopes区分用户和客户端

使用Django Scopes区分用户和客户端
EN

Stack Overflow用户
提问于 2014-12-22 01:38:20
回答 1查看 1K关注 0票数 0

我正在开发一个REST,它是由一个js应用程序以及其他一些应用程序/客户端使用的。我正在使用Django REST框架,我想使用django-oauth工具包OAUTH2进行身份验证处理。

问题:一些API调用只能由其他应用程序/客户端调用,而不能由用户自己调用(原因:允许外部应用程序为特定用户解锁成就,但不允许用户这样做)。我想使用两个不同的作用域:一个用于用户,另一个用于那些外部应用程序/客户端,并且只允许对其中任何一个作用域进行特定的API调用。这样才能达到我的目的吗?如果是这样,我如何限制用户查询“外部应用程序”范围?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-23 19:02:28

我以前通过在DjangoRestFramework中使用自定义DjangoRestFramework来实现这一点。

代码语言:javascript
复制
class APIKeyAuthentication(BaseAuthentication):

    def authenticate(self, request):
        """
        Check if there is an api key in the request and match it
        to the api keys we have. If it matches or is empty allow entrance.
        """
        api_key = request.META.get('HTTP_X_APIKEY', None)
        if not api_key:
            # if api key not in headers try get params
            api_key = request.GET.get("apikey", request.GET.get("api_key", None))

        if not api_key:
            # no api key in request
            raise PermissionDenied(
                detail="No API key send. Use the header \"X-APIKey\" "
                       "or the GET parameter \"apikey\""
            )


        auth_user = get_user_from_django_oauth_toolkit()

        if api_key == settings.APIKEYS["internal"]:
            request.is_internal = True

        return auth_user, None

您需要更新settings.py以告诉DRF使用此身份验证

代码语言:javascript
复制
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'app.authentication.APIKeyAuthentication',
    )
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27595582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档