Maison  >  Article  >  développement back-end  >  Comment stocker en toute sécurité les clés privées pour la génération JWT dans Google App Engine ?

Comment stocker en toute sécurité les clés privées pour la génération JWT dans Google App Engine ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-18 21:13:02685parcourir

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

Hébergement d'une clé privée dans Google App Engine

Utilisation de la bibliothèque "github.com/dgrijalva/jwt-go" pour créer des jetons Web JSON implique l’utilisation d’une clé privée. Bien que cette clé puisse être facilement utilisée lors de l'hébergement local, le déploiement sur Google App Engine (GAE) présente un défi en raison du manque d'accès au système de fichiers.

Options de stockage des clés

Lors de l'hébergement sur GAE, il existe deux options principales pour stocker la clé privée :

  1. Stockage statique : La clé privée peut être expédiée avec le code de l'application sous forme de " fichier statique". Il s'agit d'une approche simple, mais elle ne permet pas de modifications dynamiques de la clé.
  2. Stockage de la banque de données : La clé privée peut être stockée dans la banque de données, ce qui permet un accès et des mises à jour par programmation. . Cependant, il est important de noter qu'une clé stockée de cette manière peut être soumise à certaines considérations de sécurité.

Stockage de fichiers statiques

Pour stocker la clé privée key en tant que fichier statique dans GAE, il peut être placé dans le répertoire racine de l'application et référencé à l'aide d'un chemin relatif. Par exemple, une clé située dans key/my_key.txt est accessible sous key/my_key.txt.

Stockage de la banque de données

Pour stocker la clé privée dans la banque de données , une KeyEntity peut être créée :

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
}

La clé stockée est ensuite accessible via la fonction 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
}

Remarque : Les fichiers statiques ne sont pas disponibles au code de l'application. Par conséquent, référencer une clé privée stockée sous forme de fichier statique nécessite une configuration minutieuse pour garantir que le fichier est disponible pour l'application.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn