在 Google App Engine 中托管私钥
使用“github.com/dgrijalva/jwt-go”库创建 JSON Web 令牌涉及私钥的使用。虽然在本地托管时可以轻松使用此密钥,但由于缺乏文件系统访问权限,部署到 Google App Engine (GAE) 会带来挑战。
密钥存储选项
在 GAE 上托管时,有两个主要选项用于存储私钥:
-
静态存储:私钥可以作为“静态”文件。这是一种简单的方法,但它不允许对密钥进行动态更改。
-
数据存储区存储:私钥可以存储在数据存储区中,从而允许以编程方式访问和更新。但需要注意的是,以这种方式存储的密钥可能会受到某些安全考虑。
静态文件存储
用于存储私有密钥key在GAE中作为静态文件,可以放置在应用程序的根目录下,并使用相对路径引用。例如,位于 key/my_key.txt 的密钥可以作为 key/my_key.txt 进行访问。
数据存储存储
将私钥存储在数据存储中,可以创建一个 KeyEntity:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import (
"context"
"cloud.google.com/go/datastore"
)
type KeyEntity struct {
Key string
}
func StoreKey(ctx context.Context) error {
client, err := datastore.NewClient(ctx, projectID)
if err != nil {
return err
}
_, err = client.Put(ctx, datastore.NameKey( "Key" , "key" , nil), &KeyEntity{Key: privateKey})
return err
}
|
登录后复制
然后可以通过 GetKey 函数访问存储的密钥:
1 2 3 4 5 6 7 8 9 10 11 12 13 | func GetKey(ctx context.Context) (string, error) {
client, err := datastore.NewClient(ctx, projectID)
if err != nil {
return "" , err
}
var keyEntity KeyEntity
if err = client.Get(ctx, datastore.NameKey( "Key" , "key" , nil), &keyEntity); err != nil {
return "" , err
}
return keyEntity.Key, nil
}
|
登录后复制
注意:静态文件不可用到应用程序的代码。因此,引用存储为静态文件的私钥需要仔细配置,以确保该文件可供应用程序使用。
以上是如何在 Google App Engine 中安全存储 JWT 生成的私钥?的详细内容。更多信息请关注PHP中文网其他相关文章!