Вы можете использовать jwt.MapClaims
с "data": map[string]string
со следующими шагами:
- Шаги 1.1 и 1.2 создают токен
- Шаги 2.1 и 2.2 анализируют токен и извлекают значения под-претензий.
В приведенном ниже примере jwt
- это github.com/dgrijalva/jwt-go
.
Шаг 1.1: создание претензий
Создание пользовательских MapClaims
с data
картой. Добавьте пользовательское свойство data.name
, которое мы извлечем ниже.
claims := &jwt.MapClaims{
"iss": "issuer",
"exp": time.Now().Add(time.Hour).Unix(),
"data": map[string]string{
"id": "123",
"name": "JohnDoe",
},
}
Шаг 1.2: Создайте JWT
В этом примере мы будем использовать ключ симметрии c.
token := jwt.NewWithClaims(
jwt.SigningMethodHS256,
claims)
secretKey := "foobar"
tokenString, err := token.SignedString([]byte(secretKey))
Шаг 2.1. Разобрать токен и привести утверждения к MapClaims
.
. Снова использовать secretKey
, поскольку в этом примере используется HS256.
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
return []byte(secretKey), nil
})
claims := token.Claims.(jwt.MapClaims)
Шаг 2.2: Извлечение пользовательского под-требования
Приведение data
к map[string]interface{}
и приведение data["name"]
к string
.
data := claims["data"].(map[string]interface{})
name := data["name"].(string)