不同服务器上的 Django OAuth2 提供程序和资源?
Django OAuth2 provider and resources on different servers?
我希望将 Django 设置为使用 OAuth2 来验证我使用的服务的用户 运行,但我在理解令牌的传递方式时遇到了一些困难。
我一直在学习本教程:https://django-oauth-toolkit.readthedocs.org/en/0.7.0/tutorial/tutorial_01.html。我已经能够启动服务器并 运行 作为 OAuth 提供者,它似乎可以正常工作。我能够登录并设置应用程序。我遇到的困难是弄清楚各种令牌是如何传递的。
假设我的 OAuth 提供程序位于一台服务器上 - 让我们称之为 Provider.com - 我想要验证的服务在 service.com 上。当用户首次尝试向服务发出请求时,他们首先需要针对提供者进行身份验证。因此,他们单击登录按钮,将他们定向到 Provider.com。他们输入他们的凭据。如果服务器上的一切设置正确,他们应该看到一个提示,让他们有机会允许或拒绝 Service.com 访问他们在 Provider.com 上的帐户。假设他们单击允许,然后他们将被重定向到 Service.com,并获得一个令牌。在以后调用 Service.com 时,他们会传入令牌,并且在理论上能够进行经过身份验证的调用。
我理解的问题是:Provider 和 Service 在什么时候进行通信?如果调用服务,它如何知道随调用传递的身份验证令牌有效?有已知的方法可以知道特定令牌有效,除非:A) 它从先前的调用中识别出相同的令牌,该令牌也经过身份验证或 B) 它与 OAuth 2 提供程序对话并验证令牌的真实性。
类似于此处找到的图表显示了浏览器中的过程:
最后,客户端应用程序将身份验证代码、客户端 ID 和客户端密码发送给 OAuth2 提供程序。在前面提到的教程中,实际上并不清楚这是如何完成的。在教程中,提供者和服务在同一台机器上,看起来它们也共享同一个数据库。
这引出了我的问题:如何在与正在访问的 resource/service 不同的服务器上托管基于 Django 的 OAuth 提供程序?这可能吗?
从另一个 post 来看,这表明这可能是不可能的: 至少对于现有的 Django OAuth2 提供程序框架,情况确实如此吗?
这取决于您使用的 oauth2 流程。您似乎正在使用验证码。
在那种情况下:
service.com将浏览器发送到provider.com进行用户认证(uri包含service.comclient_id和redirect_uri)
用户在 provider.com 上进行身份验证,然后使用 ?code 参数将浏览器重定向到 service.com 的 redirect_uri。
在您的服务器端,处理此代码参数并使用它请求令牌。
参见 https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified#web-server-apps
我希望将 Django 设置为使用 OAuth2 来验证我使用的服务的用户 运行,但我在理解令牌的传递方式时遇到了一些困难。
我一直在学习本教程:https://django-oauth-toolkit.readthedocs.org/en/0.7.0/tutorial/tutorial_01.html。我已经能够启动服务器并 运行 作为 OAuth 提供者,它似乎可以正常工作。我能够登录并设置应用程序。我遇到的困难是弄清楚各种令牌是如何传递的。
假设我的 OAuth 提供程序位于一台服务器上 - 让我们称之为 Provider.com - 我想要验证的服务在 service.com 上。当用户首次尝试向服务发出请求时,他们首先需要针对提供者进行身份验证。因此,他们单击登录按钮,将他们定向到 Provider.com。他们输入他们的凭据。如果服务器上的一切设置正确,他们应该看到一个提示,让他们有机会允许或拒绝 Service.com 访问他们在 Provider.com 上的帐户。假设他们单击允许,然后他们将被重定向到 Service.com,并获得一个令牌。在以后调用 Service.com 时,他们会传入令牌,并且在理论上能够进行经过身份验证的调用。
我理解的问题是:Provider 和 Service 在什么时候进行通信?如果调用服务,它如何知道随调用传递的身份验证令牌有效?有已知的方法可以知道特定令牌有效,除非:A) 它从先前的调用中识别出相同的令牌,该令牌也经过身份验证或 B) 它与 OAuth 2 提供程序对话并验证令牌的真实性。
类似于此处找到的图表显示了浏览器中的过程:
最后,客户端应用程序将身份验证代码、客户端 ID 和客户端密码发送给 OAuth2 提供程序。在前面提到的教程中,实际上并不清楚这是如何完成的。在教程中,提供者和服务在同一台机器上,看起来它们也共享同一个数据库。
这引出了我的问题:如何在与正在访问的 resource/service 不同的服务器上托管基于 Django 的 OAuth 提供程序?这可能吗?
从另一个 post 来看,这表明这可能是不可能的: 至少对于现有的 Django OAuth2 提供程序框架,情况确实如此吗?
这取决于您使用的 oauth2 流程。您似乎正在使用验证码。
在那种情况下:
service.com将浏览器发送到provider.com进行用户认证(uri包含service.comclient_id和redirect_uri) 用户在 provider.com 上进行身份验证,然后使用 ?code 参数将浏览器重定向到 service.com 的 redirect_uri。 在您的服务器端,处理此代码参数并使用它请求令牌。
参见 https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified#web-server-apps