Sobes.tech
Senior

Wie geht man damit um, wenn ein Benutzer ein Token erhält, seine Rolle ändert und mit dem geänderten Token zum Dienst kommt?

sobes.tech KI

Antwort von AI

Если пользователь получил токен и изменил в нём роль, то это означает, что токен не защищён должным образом. Чтобы с этим бороться, используют цифровую подпись токена (например, JWT с подписью HMAC или RSA). При получении токена сервис проверяет подпись — если токен был изменён, подпись не совпадёт, и токен будет отвергнут.

Пример проверки JWT на Go с использованием библиотеки github.com/dgrijalva/jwt-go:

import (
    "fmt"
    "github.com/dgrijalva/jwt-go"
)

func validateToken(tokenString string, secret []byte) (*jwt.Token, error) {
    token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
        if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
            return nil, fmt.Errorf("unexpected signing method")
        }
        return secret, nil
    })
    if err != nil {
        return nil, err
    }
    if !token.Valid {
        return nil, fmt.Errorf("invalid token")
    }
    return token, nil
}

Таким образом, любые изменения в содержимом токена без правильной подписи делают его недействительным.