如何在Google应用引擎中存储我的服务器的私钥?

时间:2016-01-06 08:57:04

标签: google-app-engine go jwt google-cloud-datastore

我正在使用"github.com/dgrijalva/jwt-go"来创建JSON网络令牌 当我在本地托管我的服务器时,我可以像往常一样使用我的私钥。但是在GAE中它不起作用,因为我无法访问文件系统。

你们会怎么做?将密钥存储在数据存储区或任何其他想法中?

由于

编辑:

我的app.yaml看起来像这样(api_version以下):

handlers:
- url: /.*
  script: _go_app

2 个答案:

答案 0 :(得分:3)

在AppEngine上,您无权访问主机操作系统的文件系统,但您可以访问您的Web应用程序的文件(您拥有只读权限,您无法更改它们而您无法在应用程序的文件夹中创建新文件。

所以问题是:您是否希望在不重新部署应用程序的情况下从应用程序更改此私钥?或者如果它被部署并且静态地#34;它是完全正常的。使用您应用的代码?

如果您不需要更改它(或仅在您重新部署应用时),最简单的方法是将其存储为"静态"将文件作为您的webapp的一部分。您可以使用相对路径引用应用程序的文件,其中当前或工作目录是您的应用程序的根目录。例如。如果您的应用在其根目录中包含key文件夹(app.yaml所在的位置),并且my_key.txt文件夹中有key文件,则可以使用路径:key/my_key.txt

实际上,#34; ship"使用应用程序代码的静态文件:只需考虑由Go代码(例如包html/template)读取和处理的HTML模板,以生成HTML结果; HTML模板文件的内容不会直接提供给客户端。

如果您需要不时更改应用程序而无需重新部署应用程序,请将其存储在应用程序可以读取和修改的数据存储区中。

注意:

一个重要的注意事项:并非每个文件都可以被代码读取,这取决于应用程序配置。引自Configuring with app.yaml / Static file handlers

  

静态文件是指为给定URL直接提供给用户的文件,例如图像,CSS样式表或JavaScript源文件。静态文件处理程序描述应用程序目录中的哪些文件是静态文件,以及哪些URL为它们提供服务。

     

为了提高效率,App Engine与应用程序文件分开存储和提供静态文件。应用程序的文件系统中没有静态文件。 如果您有需要由应用程序代码读取的数据文件,则数据文件必须是应用程序文件,并且不得与静态文件模式匹配。

     

静态文件处理程序可以通过两种方式定义:作为映射到URL路径的静态文件的目录结构,或者作为将URL映射到特定文件的模式。

阅读如何正确配置应用程序和静态文件/目录的链接。

答案 1 :(得分:0)

解决方案是将app.yaml保留原样。将app.yaml放在项目的root lvl中。然后将所有导入从GOPATH开始更改为从项目根开始。让我选择将app.yaml和main go文件放在项目根目录下的不同文件夹中的问题是因为双重导入。阅读本文以便更好地理解:Google Go AppEngine imports and conflicts when serving / testing

该解决方案使我的项目找到了我想要的文件。