我在 node.js (w/ Express) 中构建了一个 API,它目前支持 OAuth 2.0 服务器端(显式)身份验证。我想允许客户端通过 javascript 库(客户端隐式身份验证)连接到应用程序。
首先,我知道我需要在我的服务器上启用 CORS。
我目前对隐式身份验证问题的理解是,我们不能要求 javascript 客户端在请求中包含 3rd 方应用程序的秘密,因为这将涉及将秘密编码到 javascript 中,这将是一个安全风险(暴露密钥)。因此,从 javascript 客户端发出的请求仅使用应用程序令牌(并且没有秘密)进行签名。为了保证 API 端的安全性,我们必须将服务于 javacsript 的域与它声称代表的第 3 方应用程序的注册域进行匹配。
换句话说,在 API 端,这个过程听起来像这样:
- 如果传入的请求缺少第 3 方应用程序的“秘密”,请检查请求标头
- 如果标头确认请求是代表针对此第 3 方应用程序注册的域名发出的,则认为应用程序已验证(并继续验证 access_token,如果提供)。
我的困惑是这样的:
请求标头不能被欺骗吗?我如何确定发出请求的 javascript 客户端确实位于它声称的域上?