@tesouro / embedded-components-widget-token
用于铸造Tesouro嵌入的小部件令牌的服务器端帮助器
组件。薄荷糖 RFC 8693
令牌交换请求,并将其加密为JWE (A256KW + A256GCM)使用
您共享的小部件的秘密。
服务器仅。 这个包处理你的
clientSecret和widgetSecret, 所以把它放在服务器上,永远不要把它捆绑到客户端代码中。它运行在任何 服务器运行时——一个Next.js路由处理器,一个Express服务器,或者一个Lambda 处理程序。
安装
yarn add @tesouro/embedded-components-widget-token
# or
npm install @tesouro/embedded-components-widget-token
使用
只有一次的
import { createWidgetToken } from '@tesouro/embedded-components-widget-token';
const { widgetToken, exp } = await createWidgetToken({
clientId: process.env.TESOURO_CLIENT_ID!,
clientSecret: process.env.TESOURO_CLIENT_SECRET!,
widgetSecret: process.env.TESOURO_WIDGET_SECRET!,
userId: 'user_123',
userEmail: '[email protected]',
organizationReference: 'partner-org-123',
});
exp 令牌的过期时间是自epoch以来的秒数吗
客户端,以便它可以在到期前刷新。
预先配置的工厂
当在多个请求中重用相同的凭据时,将它们绑定一次
configureCreateWidgetToken:
import { configureCreateWidgetToken } from '@tesouro/embedded-components-widget-token';
const mintWidgetToken = configureCreateWidgetToken({
clientId: process.env.TESOURO_CLIENT_ID!,
clientSecret: process.env.TESOURO_CLIENT_SECRET!,
widgetSecret: process.env.TESOURO_WIDGET_SECRET!,
organizationReference: 'partner-org-123',
});
const { widgetToken, exp } = await mintWidgetToken({
userId: 'user_123',
userEmail: '[email protected]',
});
在路由处理程序中
从服务器上经过身份验证的路由调用工厂并返回
{ widgetToken, exp } 到浏览器。
开始
具有完整的Next.js路由处理程序和调用它的提供程序。
标识必须来自服务器,而不是调用者。 解决
userId,userEmail,organizationReference从您的认证会话中, 从不来自请求正文。organizationReference将业务命名为 用户属于,所以绑定一次在configureCreateWidgetToken只有当 该服务器的每个用户都属于同一业务。你的路线薄荷有效 令牌表示它接收到的任何标识,因此信任客户端提供的标识 允许任何呼叫者模拟另一个用户。
API
createWidgetToken(params): Promise<WidgetTokenResult>
| 参数 | 类型 | 要求 | 描述 |
|---|---|---|---|
clientId | string | 是 | Tesouro发布的客户端标识符。用作JWE kid 和作为 iss/client_id 在载荷中。 |
clientSecret | string | 是 | Tesouro发布的客户秘密。携带为 client_secret 在加密的有效负载中。 |
widgetSecret | string | 是 | 用于加密JWE的共享对称密钥。 |
userId | string | 是 | 主题(sub) 的内部标识令牌。 |
userEmail | string | 是 | 内部标识令牌的电子邮件声明。 |
organizationReference | string | 是 | 合作伙伴解决的组织/业务参考。进行, organization_reference 在外部加密负载中。解析服务器端,而不是从请求体输入。 |
expirationInSeconds | number | 否 | Token TTL,单位为秒。默认为 DEFAULT_EXPIRATION_IN_SECONDS (480-8分钟)。 |
返回:
interface WidgetTokenResult {
widgetToken: string; // compact-serialized JWE
exp: number; // expiration in seconds since epoch (UTC)
}
如果扔 clientId, clientSecret, widgetSecret,或者 organizationReference 缺少或为空。
configureCreateWidgetToken(creds)
结合 clientId, clientSecret, widgetSecret,以及可选的默认值
organizationReference 和 expirationInSeconds,并返回一个函数
只接受每个请求 userId / userEmail 加上可选的每次调用覆盖
用于 organizationReference 和 expirationInSeconds. organizationReference
仍然需要:返回的函数抛出,除非它被绑定在这里或
每次通话通过。
DEFAULT_EXPIRATION_IN_SECONDS
480 -默认令牌生存期 (以秒为单位) (8分钟)。
令牌格式
createWidgetToken 生成具有以下受保护标头的JWE:
{
"alg": "A256KW",
"enc": "A256GCM",
"kid": "<clientId>",
"typ": "JWT",
"cty": "JWT"
}
加密的有效负载是RFC 8693令牌交换请求,其
subject_token 是无符号标识JWT (alg: none)承载用户的
sub, email, iss, aud, iat, exp 索赔。 organizationReference
在外部加密有效负载级别生成为 organization_reference;它
未添加到内部 subject_token.
不运行节点的后端从小部件令牌构建相同的令牌 身份验证中的协议 › 用户令牌,在 嵌入的银行 或者 财务运维 文档。
许可证
apache - 2.0