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

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

Susan Sarandon
发布: 2024-11-18 21:13:02
原创
753 人浏览过

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:

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板