Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django REST框架-来自外部提供程序的OAuth2使用者API_Python_Django_Api_Oauth 2.0_Django Rest Framework - Fatal编程技术网

Python Django REST框架-来自外部提供程序的OAuth2使用者API

Python Django REST框架-来自外部提供程序的OAuth2使用者API,python,django,api,oauth-2.0,django-rest-framework,Python,Django,Api,Oauth 2.0,Django Rest Framework,我试图授权用户使用Oauth2从Django REST框架API访问一些资源 关于Oauth2和API的大多数答案都涉及将API作为提供者 但是我计划与许多RESTAPI共享一个Oauth2提供者,我不知道如何使用它(而不是如何提供Oauth2) 我不知道用户如何登录提供商SSO,然后将其令牌传递给我的消费API,该API必须根据我的提供商对用户进行身份验证(获取其信息,主要是授权) 有人知道如何使用Django REST框架中的Oauth2吗 图: [用户]->[My API][Oauth2提

我试图授权用户使用Oauth2从Django REST框架API访问一些资源

关于Oauth2和API的大多数答案都涉及将API作为提供者

但是我计划与许多RESTAPI共享一个Oauth2提供者,我不知道如何使用它(而不是如何提供Oauth2)

我不知道用户如何登录提供商SSO,然后将其令牌传递给我的消费API,该API必须根据我的提供商对用户进行身份验证(获取其信息,主要是授权)

有人知道如何使用Django REST框架中的Oauth2吗

图:

[用户]->[My API][Oauth2提供程序(使用django oauth提供程序)][Active Directory/anything]

查看当前的代码似乎是不可能的。django rest框架在内部访问提供者的数据库表,以检查令牌,并使用这些数据对请求进行身份验证


这对我来说有点违背了OAuth的目的,但现在我们开始。

我发现了这些相关的问题,这证实了我认为是我这边的一个解释错误:

基本上,标准设计没有定义这种特性。。。这是令人惊讶的,如果很多人迟早会达到这一点

最奇怪的是我找不到任何django插件来做这个。。。我们是需要使用同一身份验证服务器验证多个API的前两个吗?

最近,提出了一个名为的规范,该规范定义了一个协议,该协议允许授权受保护的资源查询授权服务器,以确定OAuth 2.0客户端提供给它们的给定令牌的元数据集

这可以解决你的问题

它由大多数著名的OAuth 2.0提供商实现,如:

  • 亚马逊干邑
  • 奥克塔
  • Auth0
  • 谷歌云身份
并且可以轻松地与Django Rest Framework API资源集成

在Django的用例中,开源库也可以完美地完成这项工作。请注意,使用开源库会带来隐藏的维护和支持成本,有时很少有

代币检查可以通过以下简单步骤实现:

  • 设置身份验证服务器并在创建OAuth2访问令牌时为资源服务器添加一个额外的作用域
    内省

    'SCOPES': {
        'read': 'Read scope',
        'write': 'Write scope',
        'introspection': 'Introspect token scope',
        ...
    }
    
  • OAuth提供程序必须有一个路径为
    /introspect/
    的端点,它将在该端点侦听任何内省请求。 e、 g.URL:
    https://example.org/o/introspect/

    例如,请求:

    POST /o/introspect/ HTTP/1.1
    Host: www.example.org
    Accept: application/json
    Content-Type: application/x-www-form-urlencoded
    Authorization: Bearer 5HtUoltwKYKHnfmxRcJu
    
    token=pOt6V4KXoMbhAraTIyA4zgyxH
    
    注意:
    token
    是访问令牌,
    承载令牌
    Base64($CLIENT\u ID:$CLIENT\u SECRET)

    对上述示例请求的响应如下所示:

    HTTP/1.1 200 OK
    Content-Type: application/json
    {
      "client_id": "o7dfkjhvHt74F9W20",
      "scope": "read write xyz",
      "username": "john",
      "exp": 1519123438,
      "active": true
    }
    
  • 使用与Auth Server相同的所有其他设置设置资源服务器,然后将以下配置添加到您的设置中:

    a。资源服务器互操作URL,例如
    https://example.org/o/introspect/

    b。资源服务器身份验证令牌,例如tBvd837tbdHssyT6bhAr9H

    或资源服务器自省凭据(即客户端id和客户端机密)


  • 对于不同的身份验证提供程序,上述步骤的实现可能有所不同。但它给出了如何按照rfc合规性完成整个配置的基本概念。

    我很想知道是否有任何更新。总是强迫OAuth提供者与客户机在同一台机器上似乎是一个非常悲哀的想法,实际上有点挫败了OAuth的一半目的。什么都没有改变。使用远程提供程序的唯一方法是编写自己的身份验证子类。我面临着同样的问题,我正要问完全相同的问题。似乎我必须实现某种自定义身份验证,但我找不到资源服务(本例中的API)如何根据创建令牌的服务验证令牌。我的意思是,我的API获得了令牌,那么我应该如何询问创建它的服务是否有效?使用django_oauth_toolkit,但它没有提供任何似乎对验证令牌有用的端点。@gepatino根据OAuth2规范,提供程序必须提供一个验证令牌的内省端点。然而,这仍然是一个提议的标准。Okta是一个企业IdP,有一个自省端点。您的IdP应该具有类似的机制