naisi_create_access_token

查看 Markdown

创建访问令牌。

SaaS 模式下 payload 必须显式包含 int 型 tenant_code:0 表示平台作用域,正整数须获租户许可;已有可信租户时不得跨租户签发。 entcustom 模式不要求业务传入 tenant_code,忽略该字段且不建立租户绑定。 本函数不会建立当前请求的可信租户上下文,失败返回 false。

函数签名

function naisi_create_access_token(string $client_mark, array $payload, string $ip, string $salt, int $expired): false|string

调用前提

应用入口先调用 naisi_is_ext_license_valid 并确认返回 true。认证 Agent 发布的许可与 heartbeat 快照,并建立或复用本请求的 BASIC 证明;不会读取许可文件或检查当前 Host。

授权类别:LICENSE_EXPLICIT_TENANT;执行模式:BASIC。许可不代替登录、租户或权限上下文;身份与数据要求见本页参数及用途说明。

参数

$client_mark

  • 类型:string
  • 必填:是
  • 默认值:无
  • 方向:输入参数。

固定 18 位 [a-z0-9] 标识:11 位设备摘要、6 位可重复随机字符、1 位校验字符。

$payload

  • 类型:array
  • 必填:是
  • 默认值:无
  • 方向:输入参数。

需要签发、编码或认证的载荷数据;访问令牌 identity 只接受五个严格小写身份名,permission 必须为非空字符串。

$ip

  • 类型:string
  • 必填:是
  • 默认值:无
  • 方向:输入参数。

需要检查、分类或绑定的 IPv4 或 IPv6 地址。

$salt

  • 类型:string
  • 必填:是
  • 默认值:无
  • 方向:输入参数。

恰好 16 字节的业务盐;密钥由扩展从内部 AES 密钥库随机选择。

$expired

  • 类型:int
  • 必填:是
  • 默认值:无
  • 方向:输入参数。

令牌的过期时间或有效期秒数,具体语义由令牌协议规定。

返回值

类型:false|string

成功时返回结果字符串,失败时返回 false。

调用示例

当前请求须满足上方调用前提;请检查实际返回值和引用输出,随机结果及数据包内容以运行环境为准。

// 先在当前请求完成许可验证;client mark 来自已验证的客户端信息。
$payload = ['uid' => 100000006, 'mark' => '69f462ee2decd40ec12d',
    'identity' => 'root', 'permission' => 'order.read', 'tenant_code' => 0];
$salt = '1234567890abcdef'; // 恰好 16 字节,验证端须使用相同值
$token = naisi_create_access_token($clientMark, $payload, $ip, $salt, 1800);
if ($token === false) { throw new RuntimeException('签发失败'); }

升级说明

当前签名用 16 字节的 $salt 字符串替代 $encryption_config 数组;密钥由扩展从内部 AES 密钥库选择。签发端和验证端须使用相同业务盐。旧调用需修改,已有令牌或 Credential 应重新签发并验证兼容性。

版本信息

  • 自版本:1.0.6
  • 实现模块:auth
  • 授权类别:LICENSE_EXPLICIT_TENANT / BASIC
  • 失败回退:false
  • 文档同步:2026-10-18