我有几个后端API,它们是Django项目。他们有一个UI(单页应用程序)和一个基于用户名密码的登录名。
我的客户通常是开发人员,他们不想要UI,他们想要的只是对后端API的访问权,他们可以构建自己的仪表板等。他们希望将API与后端系统集成在一起。
问题
问题1.我计划使用django-oauth-tool工具包,在我看来,客户端凭据授予类型将适合此用例。我说的对吗?
为了进行试验,我启动了一个单独的oauth服务器,该服务器在本地运行于8000端口,我在8001上启动了资源服务器(r1),在8002上启动了资源服务器(r2)。
第1步:
我去了oauth服务器的管理面板,为资源r1创建了用户u1,为资源r2创建了用户u2。我进入了管理面板中的应用程序模块,该模块使用授予类型资源所有者密码在应用程序中注册了r1和r2。为了生成访问令牌,我将其称为令牌端点
POST -d "grant_type=password&username=u1&password=u1password" -u "clientid of R1:clientsecre of fR1" http://localhost:8000/o/token/
我获得了访问令牌
{"access_token": "KdAOMZBiMomVxpvjAWErwVGog6NRRH", "expires_in": 86400, "token_type": "Bearer", "scope": "read write introspection", "refresh_token": "ffgkZZ5NtVFh4REs0TbFAALNkJqXVQ"}
步骤2:
说我为资源服务器R1生成的上述访问令牌,所以我转到R1的设置文件并添加了该令牌以进行自省
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:这个注册多个资源服务器的过程正确吗?我是否已正确设置内省?
问题3:如何注册在同一资源服务器上运行的不同微服务?
步骤4: 假设现在我已经准备好一个身份验证服务器来为r1和r2资源生成令牌。
现在要模拟一个场景,如果开发人员想要将我的API与他的应用程序集成在一起并想生成访问令牌,则必须先在auth服务器上注册他的应用程序,我在auth服务器上注册了一个应用程序(开发人员的应用程序)授予类型客户端凭据。
我的管理面板现在的外观是R1的用户为U1,R2的用户为U2,注册为资源服务器,开发人员应用程序与任何要访问这些资源的客户端的用户均不相关。
第5步: 模拟开发人员如何生成访问令牌,我像这样生成了访问令牌
注意:我使用了资源R1的客户端ID和客户端密钥并生成了访问令牌,但是即使对于资源R2及其工作,我也能够成功使用相同的访问令牌。
问题3:为什么我使用R1的客户ID和客户机密生成的访问令牌甚至对于R2也有效。我在这里做错什么了吗? 基本上,我希望能够为开发人员专门为资源生成访问令牌。我知道有范围和权限,但是我只能为特定资源生成访问令牌吗?为此,我需要做些什么?我需要扩展还是添加一些逻辑?
问题4:我对使用客户端凭据授予类型的想法是否正确?我注册资源服务器的步骤和要使用资源服务器的客户端应用程序的步骤是否正确?
感谢您的帮助
答案 0 :(得分:0)
要简单地保护后端,您可以使用内置的Token Authentication。
入门非常安全。它将您限制为每个用户/帐户只有一个令牌,这可能会影响轮换/吊销令牌的“用户体验”。在扩展以支持大笔交易量方面也有一些缺点。否则真的很好。
一旦您更好地了解了自己的需求,就可以考虑转向JWT,OAuth或其他基于高级/复杂令牌的身份验证方法。
答案 1 :(得分:0)
问题1.我打算使用django-oauth-tool kit,看来 我认为客户凭证授予类型适合于此 用例。我说的对吗?
是的,你是对的。
问题2:此过程是注册多个资源服务器的过程吗? 对吗我是否已正确设置内省?
是的,您的做法正确。
问题3:如何注册运行在其上的不同微服务 同一台资源服务器?
您是说在同一资源服务器上的不同端口上运行不同的微服务吗?如果是,则必须使用与R1和R2相同的方式配置资源服务器。
问题3:为什么我使用R1的客户端ID生成访问令牌 和客户机密,甚至适用于R2。我在这里做错什么吗 ?基本上,我希望能够产生访问令牌 开发人员专用于资源。我知道范围和 权限,但我可以为特定资源生成访问令牌 只要 ?我需要怎么做才能做到这一点,我需要扩展还是添加 一些逻辑吗?
访问令牌是机密。如果与任何人共享,则任何资源都将能够访问它。例如:-如果我拥有您的FB身份验证令牌,则无论该令牌属于谁,您和我都可以使用它进行相同的操作。
问题4:我是否在考虑使用客户端凭据授予类型 正确,是我完成资源注册的步骤 服务器和客户端应用程序将使用资源服务器的 是吗?
client_credentials
是处理问题陈述的正确方法。