【发布时间】:2015-06-30 14:31:26
【问题描述】:
我们有一个身份服务器,它为我们所有的各种应用程序实施 OAuth2 协议,以便我们的用户可以在这些应用程序之间共享一个身份。我在考虑如何安全地将我的应用程序与服务器连接起来时遇到了麻烦。
以下是我们现在拥有的堆栈组件:
- 调用我们的 API (app.mydomain.com) 的单页 javascript 应用程序
- API 是 Django Rest Framework API (api.mydomain.com)
- 身份服务器 (auth.mydomain.com)
这就是我的想法:
javascript 应用程序使用用户在表单上输入的用户名和密码 POST 到
api.mydomain.com/login,并在标题中传递该应用程序的clientId注册申请。api.mydomain.com/login向auth.mydomain.com发出请求,为用户请求密码授权,并传递 clientId 和 clientSecret(假设在 api 端,我们知道如何将 clientId 映射到其密钥)。如果用户名、密码、clientId 和 clientSecret 都检出,
auth.mydomain.com会使用访问令牌进行响应。身份服务器使用访问令牌、刷新令牌等进行响应。类似于
{
"access_token": "someRequestToken",
"refresh_token": "someRefreshToken",
"expires_in": 3600,
"token_type": "Bearer"
}
- 将来对
api.mydomain.com的任何调用都将使用请求中提供的Bearer XXX令牌进行 - 我们在 API 上的自定义身份验证模块可以读取令牌并在每次请求时使用身份服务器检查其有效性。
我的问题是 - 我怎样才能将它插入到 SessionMiddleware 和 SessionAuthentication 中,这样我们就不需要在每个请求中向 API 提交令牌,因此 API 不需要检查身份服务器的有效性每个请求?
感谢您的任何想法。
【问题讨论】:
标签: django oauth-2.0 django-rest-framework