oauth 2.0-Django Rest框架和自定义OAuth2服务器



我们有一个身份服务器,它为我们所有的各种应用程序实现OAuth2协议,这样我们的用户的单个身份就可以在这些应用程序之间共享。我很难思考如何将我的应用程序安全地连接到服务器。

以下是我们现在拥有的堆栈组件:

  1. 一个单页javascript应用程序,可调用我们的API(app.mydomain.com)
  2. API是Django Rest Framework API(API.mydomain.com)
  3. 身份服务器(auth.mydomain.com)

以下是我的想法:

  1. javascript应用程序使用用户在表单上输入的用户名和密码POST到api.mydomain.com/login,并在标题中传递该应用程序的clientId,该应用程序在身份服务器上定义为注册应用程序。

  2. api.mydomain.com/loginauth.mydomain.com发出请求,请求为用户授予密码,并传递clientId和clientSecret(假设在api方面,我们知道如何将clientId映射到其机密)。

  3. 如果用户名、密码、clientId和clientSecret都签出,auth.mydomain.com将使用访问令牌进行响应。身份服务器使用访问令牌、刷新令牌等进行响应。类似的东西

{ "access_token": "someRequestToken", "refresh_token": "someRefreshToken", "expires_in": 3600, "token_type": "Bearer" }

  1. 未来对api.mydomain.com的任何调用都将使用请求中提供的Bearer XXX令牌进行-我们在API上的自定义身份验证模块可以读取令牌,并在每个请求中与身份服务器检查其有效性

我的问题是-我如何将其插入到SessionMiddleware和SessionAuthentication中,这样我们就不需要将每个请求的令牌提交给API,API也不需要与身份服务器检查每个请求的有效性?

谢谢你的想法。

如果您正在实现OAuth2,则令牌必须随每个请求一起传递。OAuth2的整个安全性取决于它。您还提到您正在使用REST。会话对REST来说是绝对不允许的。

最新更新