Сервисный токен - это простой токен JWT, который можно легко создать с помощью службы и сценического имени, а также секрета. Вы можете создать токен самостоятельно и прикрепить его. Взгляните на фактический код, который использует призма CLI:
getToken(serviceName: string, stageName: string): string | undefined {
if (this.secrets) {
const data = {
data: {
service: `${serviceName}@${stageName}`,
roles: ['admin'],
},
}
return jwt.sign(data, this.secrets[0], {
expiresIn: '7d',
})
}
return undefined
}
Источник: https://github.com/prisma/prisma/blob/master/cli/packages/prisma-yml/src/PrismaDefinition.ts
Дополнительная информация о структуре:
Сервисные токены соответствуют спецификации JSON Web Token (JWT) (RF C 7519):
"JSON Web Token (JWT) - это компактное, безопасное для URL средство представления заявки передаются между двумя сторонами. Заявки в JWT кодируются как объект JSON, который используется как полезная нагрузка структуры JSON Web Signature (JWS) или как открытый текст JSON Web Encryption ( Структура JWE), обеспечивающая цифровую подпись заявок или защиту целостности с помощью кода аутентификации сообщений (MA C) и / или шифрование. "
JWT имеет следующие три компонента:
Заголовок: Заголовок обычно состоит из двух частей: тип токена, который является JWT, и используемый алгоритм хэширования (который является HS256 в случае сервисных токенов Prisma).
{ "alg": "HS256", "typ": "JWT" }
Payloa d: полезная нагрузка содержит претензии. Претензии - это заявления о сущности (обычно о пользователе) и дополнительные данные. Вот как это выглядит для службы под названием demo, развернутой на стадии разработки:
{
"data": {
"service": "demo@dev",
"roles": ["admin"]
},
"iat": 1532530208,
"exp": 1533135008
}
Подпись: подпись используется для проверки того, что сообщение не было изменено на этом пути. Чтобы создать часть подписи, вы должны взять закодированный заголовок, кодированную полезную нагрузку, секрет, алгоритм, указанный в заголовке, и подписать его. Например, если вы хотите использовать алгоритм HMAC SHA256, подпись будет создана следующим образом:
HMACSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret)
Следовательно, JWT обычно выглядит так: xxxxx.yyyyy.zzzzz
Источник: https://www.prisma.io/docs/prisma-server/authentication-and-security-kke4/#service - токен