gpt4 book ai didi

Django-OAuth-ToolKit : Generating access token's for multiple resources/services using client credentials grant type of OAuth2. 0

转载 作者:行者123 更新时间:2023-12-03 16:39:16 26 4
gpt4 key购买 nike

我有几个后端 API,它们是 Django 项目。他们有一个 UI(单页应用程序)和一个基于用户名密码的登录。
我的客户通常是开发人员,他们不想要 UI,他们想要的只是访问后端 API,他们可以构建自己的仪表板等。他们希望将 API 与他们的后端系统集成。
问题
问题 1. 我打算使用 django-oauth-tool 工具包,在我看来,客户端凭据授予类型适合这个用例。我对吗 ?
为了进行实验,我在 8000 端口本地启动了一个单独的 oauth 服务器,我在 8001 上启动了资源服务器 (r1),在 8002 上启动了资源服务器 (r2)。
第1步 :
我去了 oauth 服务器的管理面板,为资源 r1 创建了一个用户 u1,为资源 r2 创建了一个用户 u2。我去了管理面板中的应用程序模块,在授予类型资源所有者密码的应用程序中注册了 r1 和 r2。为了生成访问 token ,我调用了 token 端点

POST -d "grant_type=password&username=u1&password=u1password" -u "clientid of R1:clientsecre of fR1" http://localhost:8000/o/token/
我得到了访问 token
{
"access_token":"KdAOMZBiMomVxpvjAWErwVGog6NRRH",
"expires_in":86400,
"token_type":"Bearer",
"scope":"read write introspection",
"refresh_token":"ffgkZZ5NtVFh4REs0TbFAALNkJqXVQ"
}
第2步:
说上面我为资源服务器 R1 生成的访问 token ,所以我去了 R1 的设置文件并添加了这个 token 以进行自省(introspection)
OAUTH2_PROVIDER = {
'RESOURCE_SERVER_INTROSPECTION_URL': 'http://localhost:8000/o/introspect/',
'RESOURCE_SERVER_AUTH_TOKEN': '9b2uVud7WXHEdyolznvvkM3KwWfkVe', # OR this but not both:
#'RESOURCE_SERVER_INTROSPECTION_CREDENTIALS': ('5sRVXLoTQj9vlkLWaziIMZrgra1keupWIQ2On2hX','5jwMxls1JiAiQiNVnRTtbjmzgRO20FEHD0BBdiSAwvSL1XswZKqglDRke2L8Ig77ol7OE3ZdsA9SE7sry0u3BXwd1OvfFfhDVJFSLWlPG6g1vB3w4ZFc1g8ZwgzXJooc'),
}
第 3 步:
我对资源服务器 R2 也做了同样的处理。
问题2:这个注册多个资源服务器的过程是否正确?我是否正确设置了自省(introspection)?
问题3:如何注册在同一资源服务器上运行的不同微服务?
第4步:
假设现在我有一个身份验证服务器准备好为 r1 和 r2 资源生成 token 。
现在要模拟一个场景,即想要将我的 API 与他的应用程序集成的开发人员想要生成访问 token 必须首先将他的应用程序注册到身份验证服务器,我在授权服务器上注册了一个应用程序(开发人员的应用程序)与 Grant 类型客户端证书。
这就是我的管理面板现在的外观,R1 和用户 U1 和 R2 和 U2 注册为资源服务器和开发人员应用程序,与任何想要访问这些资源的客户端的用户无关。
enter image description here
第 5 步:
模拟开发人员如何生成访问 token ,我生成了这样的访问 token
enter image description here
注意:我使用了资源 R1 的客户端 ID 和客户端密码并生成了访问 token ,但即使资源 R2 及其工作,我也能够成功使用相同的访问 token 。
问题 3:为什么我使用 R1 的客户端 ID 和客户端密码生成的访问 token 即使对 R2 也有效。我在这里做错了吗?
基本上,我希望能够为开发人员专门为资源生成访问 token 。我知道有范围和权限,但我可以只为特定资源生成访问 token 吗?我需要做什么来实现这一点,我需要扩展或添加一些逻辑吗?
问题 4:我对使用客户端凭据授权类型的想法是否正确,我为注册资源服务器和将使用资源服务器的客户端应用程序所做的步骤是否正确?
谢谢你的帮助

最佳答案

question 1. I am planning to use django-oauth-tool kit , it seems to me that the client credentials grant type would be suitable for this use case . Am I right ?



你是对的。

Question 2 : Is this process of registering multiple resource server's correct ? Have I set up the introspection correctly ?



是的,你做对了。

Question 3 : How would I register different micro services running on the same resource server ?



您的意思是在同一资源服务器上的不同端口上运行不同的微服务吗?如果是,那么您必须以与 R1 和 R2 相同的方式配置资源服务器。

Question 3 : Why is the access token I generated using R1's client id and client secret working even for R2. Am I doing something wrong here ? Basically , I want to be able to produce access tokens for developer's specifically for a resource. I know there are scope and permissions but can I generate access token for a specific resource only ? what do I need to do to achieve this , do I need extend or add some logic ?



访问 token 是 保密 .如果与任何人共享,则任何一个资源都可以访问它。例如:- 如果我有你的 FB 身份验证 token ,你和我可以用它做同样的事情,不管这个 token 属于谁。

Question 4 : Is my thought on using client credentials grant type correct and are the steps that I have done to register resources server's and the client app's which are going to use resource server's correct ?


  • 是的,使用 client_credentials是处理问题陈述的正确方法。
  • 是的,您以正确的方式设置它。但是,请查看 JWT 以获得替代和高级方法。使用 JWT 避免了对 OAuth 服务器的自省(introspection)调用,从而节省了网络调用。
  • 关于Django-OAuth-ToolKit : Generating access token's for multiple resources/services using client credentials grant type of OAuth2. 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55351275/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com