【发布时间】:2020-01-07 16:40:17
【问题描述】:
我有一个公开公共 API 的网站。我想使用 OAuth 2 保护这个公共 API。为了尽量减少要维护的代码路径的数量,我想重构我的网站以使用受 OAuth 2 保护的公共 API 端点。
我打算这样做的方法是在我的服务器中注册一个 OAuth 2 客户端作为“我的网站”,然后让它获取一个短期令牌。我发现这种方法存在 2 个问题:
- 我的客户必须有效地拥有每个范围,因为 网站包含所有可能的操作。 API 只是一个子集 这个(虽然我希望改变这一点)。第二个问题是 令牌的安全性和缓存。该令牌将存在一个小时。
- 如果用户刷新页面,我是否要获取另一个令牌?如果我存储 它在本地的 cookie 或 localStorage 中,是否有安全性 某种脆弱?
假设我为 UI 的每个页面注册了一个不同的 OAuth 客户端。这将使得 #2 中的令牌在被盗时范围有限,但它变得非常乏味。
另一种方法是不在我的网站上使用公共 API,保护依赖于 CORS。恶意攻击者无法访问这些端点,因为它们只被允许来自用户所在的域(以及诸如 nonce 之类的东西)。
【问题讨论】: