OAuth 2.0:允许在node.js / express API中进行客户端(隐式/ Javascript)authentication

我在node.js(w / Express)中构build了一个API,它目前支持OAuth 2.0服务器端(显式)身份validation。 我想允许客户端通过JavaScript库(客户端隐式authentication)连接到应用程序。

首先,我知道我需要在我的服务器上启用CORS 。

我目前对隐式authentication问题的理解是,我们不能要求javascript客户端在请求中包含第三方应用程序的秘密,因为这涉及将秘密编码到JavaScript中,这将是安全风险(暴露密钥)。 因此,从javascript客户端发出的请求仅使用应用程序令牌进行签名(而不是秘密)。 为了保证API端的安全性,我们必须将服务于javacsript的域与它声称代表的第三方应用程序的注册域匹配。

换句话说,听起来像这样的过程在API端:

  1. 如果传入的请求缺less第三方应用程序的“秘密”,请检查请求标头
  2. 如果标题确认请求是代表针对此第三方应用程序注册的域名进行的,请考虑validation应用程序(并继续validationaccess_token,如果提供的话)。

我的困惑是这样的:

不能请求头被欺骗? 我怎样才能确保提出请求的JavaScript客户端真正驻留在它声称的域名?

您应该能够信任浏览器,以防止客户端更改您在标题中find的引用者信息。 在这种情况下,大多数apis会很乐意检查引用者。

这可以通过让服务器为客户端提供快速到期的令牌来改善。 令牌使用一个不公开的秘密。

3rd party server asks for token using shared secret to your server 3rd party server serves token to its client client makes request to your server providing referrer (assured by browser), and token your server verifies both before replying 

当然,如果有人使用命令行工具,浏览器扩展或服务器,他们可以在请求中发送任何他们想要的东西,但他们只有窗口中的令牌将过期,而你如果你觉得客户端的ip在滥用这个服务,总是可以禁止ip地址。