首页 >后端开发 >Golang >如何在 Google App Engine 中安全存储 JWT 生成的私钥?

如何在 Google App Engine 中安全存储 JWT 生成的私钥?

Susan Sarandon
Susan Sarandon原创
2024-11-18 21:13:02759浏览

How to Securely Store Private Keys for JWT Generation in Google App Engine?

在 Google App Engine 中托管私钥

使用“github.com/dgrijalva/jwt-go”库创建 JSON Web 令牌涉及私钥的使用。虽然在本地托管时可以轻松使用此密钥,但由于缺乏文件系统访问权限,部署到 Google App Engine (GAE) 会带来挑战。

密钥存储选项

在 GAE 上托管时,有两个主要选项用于存储私钥:

  1. 静态存储:私钥可以作为“静态”文件。这是一种简单的方法,但它不允许对密钥进行动态更改。
  2. 数据存储区存储:私钥可以存储在数据存储区中,从而允许以编程方式访问和更新。但需要注意的是,以这种方式存储的密钥可能会受到某些安全考虑。

静态文件存储

用于存储私有密钥key在GAE中作为静态文件,可以放置在应用程序的根目录下,并使用相对路径引用。例如,位于 key/my_key.txt 的密钥可以作为 key/my_key.txt 进行访问。

数据存储存储

将私钥存储在数据存储中,可以创建一个 KeyEntity:

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 函数访问存储的密钥:

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn