如果我的问题是正确的,您希望您的客户端(React 应用程序)成为唯一可以访问您的服务器的客户端。
作为解决方案,您必须结合使用 CORS 和 JWT 授权,因此我建议使用严格的 CORS 以仅启用您的 react 应用程序的域来调用服务器。为了实现这一点,我通常在我的服务器上使用CORS npm 模块和configure 源,或者你也可以自己做。
var express = require('express')
var cors = require('cors')
var app = express()
var corsOptions = {
origin: 'http://example.com',
optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
}
上面的代码只允许服务器接受来自 example.com 的请求,或者查看this code 以获得更动态的白名单和黑名单方法。
现在回到 JWT,它只是一个 json 加密和解密令牌,可以跨 API 请求共享以进行身份验证以及授权用户。
例如,您可以在 JWT 中存储用户的电子邮件、角色和昵称等信息,并在每个 API 请求中发送此加密的 JWT,服务器授权此请求,如果为 true,则转发到请求的 API。这种授权和转发过程通常使用“拦截器”模式实现,其中中间件(Passport oAuth)在每次 API 调用之前进行检查和验证。
执行上述 2 件事将确保只有具有有效 JWT 令牌和您允许与服务器通信的域地址的客户端。这个客户端将是你的反应应用程序,因为它是唯一具有正确 JWT 和源地址的应用程序。
因此,现在您的 react 应用程序应该确保在 API 调用(post/get/put)中传递了适当的 JWT 令牌,很可能在 API 请求的标头中,您可以拥有一个 API 助手服务来执行此操作为您将其导入组件中,无论您在哪里进行 API 调用。并且您的节点服务器将实现护照中间件模式来授权此 JWT 并过滤未授权的请求。
如果您的 react 应用没有登录名,则 JWT 也可以是客户端 ID,它将您的客户端识别为合法。就像用户登录一样,您可以让应用程序使用秘密客户端 ID 等数据调用服务器。这将返回一个 JWT 令牌。或者您可以预先生成一个 JWT 令牌,并在它第一次加载时对应用程序存储作出反应,并通过设置 TTL 和另一个配置,您可以检查正在调用您的服务器的客户端是旧的还是新的或其他一些假客户。
HTH