Маркер службы - это простой токен JWT, который можно легко создать, используя имя службы и сценическое имя, а также секрет. Вы можете сами создать токен и прикрепить его. Взгляните на реальный код, который использует prisma 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) (RFC 7519):
«Веб-токен JSON (JWT) - это компактное, безопасное для URL-адресов средство представления утверждений, передаваемых между двумя сторонами. Заявления в JWT кодируются как объект JSON, который используется в качестве полезной нагрузки веб-подписи JSON (JWS). структуры или в виде открытого текста структуры JSON Web Encryption (JWE), что позволяет утверждать цифровую подпись или защищать целостность с помощью кода аутентификации сообщения (MAC) и / или зашифровывать ».
JWT состоит из трех компонентов:
Заголовок: Заголовок обычно состоит из двух частей: типа токена, то есть JWT, и используемого алгоритма хеширования (HS256 в случае сервисных токенов Prisma).
{ "alg": "HS256", "typ": "JWT" }
Полезная нагрузка: полезная нагрузка содержит утверждения. Утверждения - это утверждения о сущности (обычно, о пользователе) и дополнительных данных. Вот как это выглядит для службы под названием 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-token
person
realAlexBarge
schedule
03.02.2020