首頁  >  文章  >  後端開發  >  如何在 Google App Engine 中安全地儲存 JWT 產生的私鑰?

如何在 Google App Engine 中安全地儲存 JWT 產生的私鑰?

Susan Sarandon
Susan Sarandon原創
2024-11-18 21:13:02688瀏覽

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