【发布时间】:2015-07-25 04:35:33
【问题描述】:
大家:
这是一个 REST 设计问题,不特定于任何编程语言。我正在创建一个通过 REST API 访问的应用程序后端。我想为 UI 和基于 API 的访问使用相同的 API。我正在尝试找出对用户进行身份验证的最佳方法,以便我可以重复使用相同的方法。
我目前对认证的想法如下:
API 用户
这些用户会获得一个用户 GUID 和一个预共享的对称密钥。在每个 API 请求中,它们都包含额外的标头或请求参数,其中包含:
- 他们的 GUID
- 包含用户 GUID、当前时间戳和另一个 GUI(令牌 GUID)的安全令牌,它们连接在一起并使用共享密钥进行加密
服务器收到请求后,会查看声明的 GUID,检索共享密钥,尝试解密并验证令牌。
界面用户
这些用户将发出登录请求,提供人工凭据(用户 ID/密码)。一旦通过身份验证,就会建立一个由 cookie 支持的会话,并基于此会话保护进一步的 REST 调用。
问题
编写一个 REST 端点以保护两种方式的最佳方式是什么:API 访问和 UI 访问干净利落,没有太多重复?我希望做以下等效的事情,但也许更干净:
@app.route('/')
def hello():
user = None
if session:
user = get_authenticated_user()
else:
user = process_auth_headers()
# Do something with user
我希望在 Flask 中编写服务器代码,但我确信该解决方案将很容易地应用于任何基于 REST 的服务器端框架。
期待社区的一些见解。
谢谢。
【问题讨论】:
标签: api rest authentication flask