如果一切都是客户端,如何通过OAuth安全地验证React客户端?

时间:2018-03-01 09:58:41

标签: node.js reactjs meteor oauth oauth-2.0

我正在尝试将OAuth与React(前端)和Meteor(服务器)项目结合使用。我尝试使用OAuth的服务并不是广受欢迎的服务之一(即Google,Facebook),所以我一直在努力弄清楚如何解决这个问题。

Meteor支持安全的服务器端“settings.json”文件,该文件存储应用程序的api密钥和密钥,我可能会使用它来验证客户端。我只是不明白如何。

我发现此程序包https://www.npmjs.com/package/react-oauth-flow和“发送OAuth请求”组件如下所示:

Vitamin

现在,我不明白如何安全地存储/提取Fruit,因为整个应用程序可供客户端使用?所以我不能使用像Meteor.settings.CLIENT_ID这样的东西,因为应用程序的客户端ID不适用于反应应用程序。

OauthReceiver组件也是如此:

Vitamin.B

Fruits是如何获取的?同样,不能使用Meteor.settings.CLIENT_SECRET,因为它只对服务器可用,并且组件在客户端呈现。

我觉得这是我的概念性理解问题,如果有人能向我解释,我将非常感激。

1 个答案:

答案 0 :(得分:0)

process.env.CLIENT_SECRET是指在运行时从命令行传递到您的应用程序中的环境变量。如果您使用的是Create React App,则有关实现方法的文档为here

如果您不使用CRA,则可以从package.json或命令行中将环境变量传递到webpack build命令中。语法如下所示:

{ // the rest of your package.json scripts: { "dev": "webpack --env.API_URL=http://localhost:8000 --config webpack.config.dev.js", "build": "webpack --env.API_URL=https://www.myapi.com --config webpack.config.build.js" } }

使用此语法,您可以将您的客户端密钥/等作为环境变量传递到React应用程序。但是,这些将可供客户端使用,并且不如用于OAuth2.0的正确身份验证代码流那么安全。

如果已经有一个后端(您需要这样做),请考虑实施this流以增强安全性。