| 文档属性 | 内容 |
|---|---|
| 文档名称 | DKEY AM API 标准文档 |
| 接口数量 | 43 |
| 适用系统 | DKEY AM |
| 编码 | UTF-8 |
本文档用于 DKEY AM 系统接口对接。示例中的账号、密码、密钥、手机号、邮箱、IP 地址及标识符
仅用于说明,接入方必须替换为当前环境的有效值,且不得使用生产凭据。
目录
文档说明
接入约定
API 目录
接口定义
数据结构
统一错误码说明
附录 A:目录说明
附录 B:安全说明
本文档用于指导 DKEY AM 的认证、日志、会话、用户、组织、角色、令牌、站点、终端及 MAC 管理接口对接。
共包含 43 个接口,按认证与日志、用户、组织、角色、令牌及系统管理分类。
接口路径主要位于 /am/webauth/1/**、/am/rest/p/1/**、/am/rest/p/2/** 与 /am/api/admin/**。
不包含部署、租户初始化、数据库配置以及页面端操作说明。
| 协议 | 默认端口 | Base URL 示例 |
|---|---|---|
| HTTP | 8080 | http://{host}:8080 |
| HTTPS | 8443 | https://{host}:8443 |
生产环境应使用 HTTPS。文档中的 {baseUrl} 表示实际部署环境的服务地址。
HTTP端口8080,HTTPS端口8443
所有参数的值使用url编码,格式utf-8,编码前:中文,编码后:%e4%b8%ad%e6%96%87
GET请求地址拼接示例(以1.1接口为例)http://认证系统地址:8080/am/webauth/1/strong/authenticate?参数名=参数值\&参数名=参数值\.\.\.\.\.\.
POSTapplication/x\-www\-form\-urlencoded
URL 参数使用 UTF-8 编码。
JSON 请求应携带 Content-Type: application/json; charset=UTF-8。
表单请求使用 application/x-www-form-urlencoded;以具体接口定义为准。
时间字段无特别说明时为 Unix 毫秒时间戳。
布尔值使用 JSON 的 true / false,不得用字符串代替。
| 接口族 | 认证方式 | 说明 |
|---|---|---|
| /am/webauth/1/** | 共享密钥 | 请求参数通常包含 tenantName、accessServerName、sharedSecret |
| /am/rest/p/1/**、/am/rest/p/2/** | 管理员参数 | 通常包含 adminLoginName、adminPassword、tenantName |
| /am/api/admin/** | Basic Auth | Authorization: Basic <base64username:password> |
| 第三方回调 | 自定义密钥 | URL 与认证字段由第三方实现和系统配置决定 |
success=true 且 errorCode=0 表示成功;success=true 但错误码非 0 表示部分失败;
success=false 表示失败。部分接口还返回 requestId、errorId 与 data。
下表按业务域归类,共 41 个接口。
| 序号 | 业务域 | 方法 | 路径 | 说明 |
|---|---|---|---|---|
| 1 | 认证、日志与会话 | GET/POST | /am/webauth/1/strong/authenticate | 用户认证 |
| 2 | 认证、日志与会话 | GET/POST | /am/webauth/1/strong/passwordRequirement | 用户认证策略 |
| 3 | 认证、日志与会话 | GET/POST | /am/webauth/1/strong/getDynamicPassword | 发送动态密码 |
| 4 | 认证、日志与会话 | GET | /am/api/admin/tenant/tacacs/report/auth/search | TACACS+ 认证日志 |
| 5 | 认证、日志与会话 | GET | /am/api/admin/tenant/tacacs/report/audit/search | TACACS+ 审计日志 |
| 6 | 认证、日志与会话 | GET | /am/api/admin/stat/session/list | 登录会话列表 |
| 7 | 用户 | GET/POST | /am/rest/p/1/identity/user/infos | 拉取所有用户信息 |
| 8 | 用户 | GET/POST | /am/rest/p/1/identity/user/unbindUserTerminals | 解绑用户终端 |
| 9 | 用户 | GET/POST | /am/rest/p/1/identity/user/bindUserTerminals | 绑定用户终端 |
| 10 | 用户 | GET/POST | /am/rest/p/1/identity/user/applyTemporaryUser | 申请临时用户 |
| 11 | 用户 | POST | /am/api/admin/tenant/identity/user/delete | 管理端删除用户 |
| 12 | 用户 | POST | /am/rest/p/2/identity/user/incSync | 增量同步用户 V2 |
| 13 | 用户 | POST | /am/rest/p/2/identity/user/add | 添加用户 |
| 14 | 用户 | POST | /am/rest/p/2/identity/user/update | 更新用户 |
| 15 | 组织 | POST | /am/api/admin/tenant/identity/group/add | 新增组织 |
| 16 | 组织 | GET | /am/api/admin/tenant/identity/group/list | 获取全部组织 |
| 17 | 组织 | POST | /am/api/admin/tenant/identity/group/update | 更新组织 |
| 18 | 角色 | GET | /am/api/admin/tenant/identity/role/list | 获取站点角色 |
| 19 | 角色 | POST | /am/api/admin/tenant/identity/role/add | 创建角色 |
| 20 | 角色 | POST | /am/api/admin/tenant/identity/role/update | 更新角色 |
| 21 | 令牌 | GET/POST | /am/rest/p/1/token/binding/list | 用户和令牌的绑定关系 |
| 22 | 令牌 | GET/POST | /am/rest/p/1/token/mobileToken/deliver | 派发手机令牌 |
| 23 | 令牌 | GET/POST | /am/rest/p/1/token/mobileToken/userQrCode | 获取手机令牌二维码 |
| 24 | 令牌 | GET/POST | /am/rest/p/1/token/mobileToken/bindAndWriteMobileTokenQrCode | 绑定并获取二维码 |
| 25 | 令牌 | GET/POST | /am/rest/p/1/token/mobileToken/completeMobileTokenBinding | 完成手机令牌绑定 |
| 26 | 令牌 | GET/POST | /am/rest/p/1/token/bind | 绑定时间型令牌 |
| 27 | 令牌 | GET/POST | /am/rest/p/1/token/unbind | 解绑时间型令牌 |
| 28 | 令牌 | GET/POST | /am/rest/p/1/token/unbindAll | 解绑所有时间型令牌 |
| 29 | 令牌 | GET/POST | /am/rest/p/1/token/mobileToken/data | 获取手机令牌信息 |
| 30 | 系统、终端与 MAC | GET/POST | /am/rest/p/1/tenant/list | 站点列表 |
| 31 | 系统、终端与 MAC | GET/POST | /am/rest/p/1/identity/blackWhiteMacAddressList/add | 新增 MAC 黑白名单 |
| 32 | 系统、终端与 MAC | POST | /am/rest/p/1/identity/blackWhiteMacAddressList/list/replace | 替换Mac地址黑白名单 |
| 33 | 系统、终端与 MAC | GET | /am/api/admin/tenant/identity/macList/list | MAC 列表集 |
| 34 | 系统、终端与 MAC | GET | /am/api/admin/tenant/identity/macList/macItem/list | 终端 MAC 地址列表 |
| 35 | 系统、终端与 MAC | POST | /am/api/admin/tenant/identity/macList/add | 新增列表集 |
| 36 | 系统、终端与 MAC | POST | /am/api/admin/tenant/identity/macList/update | 编辑列表集 |
| 37 | 系统、终端与 MAC | POST | /am/api/admin/tenant/identity/macList/delete | 删除列表集 |
| 38 | 系统、终端与 MAC | POST | /am/api/admin/tenant/identity/macList/macItem/add | 新增终端 |
| 39 | 系统、终端与 MAC | POST | /am/api/admin/tenant/identity/macList/macItem/update | 编辑终端 |
| 40 | 系统、终端与 MAC | POST | /am/api/admin/tenant/identity/macList/macItem/delete | 删除终端 |
| 41 | 系统、终端与 MAC | GET | /am/api/admin/tenant/identity/macList/macItem/search | 查询 MAC 列表项 |
| 42 | 用户 | GET | /am/api/admin/tenant/identity/user/password/expireTime | 获取用户密码到期时间 |
| 43 | 用户 | GET | /am/rest/p/1/identity/user/resetPassword | 用户改密 |
本章给出全部接口的请求方式、参数、示例和响应。同时允许 GET/POST 的接口,生产接入应优先采用
不会把敏感请求体写入 URL 的方式。
请求: GET /am/webauth/1/strong/authenticate 或 POST /am/webauth/1/strong/authenticate
| 请求参数 | 必填 | 说明 |
|---|---|---|
| tenantName | 是 | 站点名称 |
| accessServerName | 是 | 认证设备名称 需要在认证系统上创建认证设备,设备类型为:API调用 |
| sharedSecret | 是 | 认证设备共享秘钥 |
| loginName | 是 | 用户登录名 |
| password | 是 | 密码,多种情况【不要加号】: (1)用户静态密码 (2)令牌动态密码 (3)用户静态密码+令牌动态密码 |
| terminalIp | 否 | 用户终端ip |
| terminalMac | 否 | 用户终端MAC |
| 响应示例 |
|---|
| JSON { "success": true, "errorCode": 0, "dynamicPasswordLength": 6, "message": null, "roles": "admin", "dev" } |
|---|
| 响应参数 | 说明 |
|---|---|
| roles | 用户角色 |
请求: GET /am/webauth/1/strong/passwordRequirement 或 POST /am/webauth/1/strong/passwordRequirement
| 请求参数 | 必填 | 说明 |
|---|---|---|
| tenantName | 是 | 站点名称 |
| accessServerName | 是 | 认证设备名称 需要在认证系统上创建认证设备,设备类型为:API调用 |
| sharedSecret | 是 | 认证设备共享秘钥 |
| loginName | 是 | 用户登录名 |
| terminalIp | 否 | 用户终端ip |
| terminalMac | 否 | 用户终端MAC |
| 响应示例 |
|---|
| JSON { "success": true, "errorCode": 0, "data": { "staticPasswordRequired": false, "dynamicPasswordRequired": true, "needsGetDynamicPassword": false, "dynamicPasswordEnforced": true }, "message": null } |
|---|
| 响应参数 | 说明 |
|---|---|
| staticPasswordRequired | 是否需要静态密码 |
| dynamicPasswordRequired | 是否需要动态密码 如果策略为不需要动态密码,值为false 如果策略为需要动态密码,用户有令牌,值为true 如果策略为需要动态密码,用户没有令牌,值为false |
| needsGetDynamicPassword | 是否能获取动态密码 如果为true,调用接口1.3,将发送动态密码给用户 |
| dynamicPasswordEnforced | 强制使用动态密码(可以通过动态密码策略策略:用户未使用动态密码,禁止或允许,来进行配置) 如果值为true,但是用户登录没有使用令牌,则登录被禁止 |
请求: GET /am/webauth/1/strong/getDynamicPassword 或 POST /am/webauth/1/strong/getDynamicPassword
| 请求参数 | 必填 | 说明 |
|---|---|---|
| tenantName | 是 | 站点名称 |
| accessServerName | 是 | 认证设备名称 需要在认证系统上创建认证设备,设备类型为:API调用 |
| sharedSecret | 是 | 认证设备共享秘钥 |
| loginName | 是 | 用户登录名 |
| 响应示例 |
|---|
| JSON { "success": true, "errorCode": 0, "data": null, "message": null } |
|---|
| HTTP GET {baseUrl}/am/api/admin/tenant/tacacs/report/auth/search |
|---|
认证:继承管理端认证,即 Basic Auth。
| Query 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tenantId | string | 是 | 站点 ID |
| loginName | string | 否 | 登录名 |
| terminalIp | string | 否 | 终端 IP |
| accessServerIp | string | 否 | 设备 IP |
| accessServerName | string | 否 | 设备名称 |
| command | string | 否 | 命令 |
| privilegeLevel | arraystring | 否 | 权限级别,可重复传参 |
| result | integer | 否 | 结果:1 成功,0 失败 |
| startTime | integerint64 | 是 | 查询开始时间,Unix 毫秒时间戳 |
| endTime | integerint64 | 是 | 查询结束时间,Unix 毫秒时间戳 |
| firstResult | integer | 是 | 分页起始位置 |
| maxResults | integer | 是 | 最大返回数量 |
成功响应:
| JSON { "success": true, "errorCode": 0, "data": \{ "id": "\ "tenantId": "\ "loginName": "zhangsan", "terminalIp": "127\.0\.0\.1", "accessServerName": "rad", "accessServerIp": "10\.0\.0\.1", "accessServerId": "\ "accessServerBrand": "通用设备", "command": "display version", "privilegeLevel": "1", "result": 1, "recordType": 1, "createTime": 1784084235000, "createTimeInMicroseconds": 1784084235195874 \} "message": null } |
|---|
| HTTP GET {baseUrl}/am/api/admin/tenant/tacacs/report/audit/search |
|---|
认证与 Query 参数同“获取 TACACS+ 认证日志列表”。成功响应为通用结构,data 为审计日志数组;
接口定义仅给出空数组示例,未提供审计记录字段结构。
| JSON { "success": true, "errorCode": 0, "data": \[\], "message": null } |
|---|
| HTTP GET {baseUrl}/am/api/admin/stat/session/list |
|---|
认证:Basic Auth。指定 tenantId 时查询该站点并校验站点会话读取权限;不传 tenantId 时查询
全局会话,并校验部署级操作日志读取权限。
| Query 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tenantId | string | 否 | 站点 ID;为空时查询全局会话 |
| tenantName | string | 否 | 站点名称,模糊匹配 |
| identityStoreName | string | 否 | 用户源名称,模糊匹配 |
| identityStoreIds | arraystring | 否 | 用户源 ID 列表;传入时使用数据库查询 |
| userIdentity | string | 否 | 用户身份,模糊匹配 |
| personalName | string | 否 | 用户姓名,模糊匹配 |
| userLoginName | string | 否 | 用户登录名,模糊匹配 |
| userLoginNameRaw | string | 否 | 原始登录名,模糊匹配 |
| terminalIp | string | 否 | 终端 IPv4,模糊匹配 |
| terminalIp6 | string | 否 | 终端 IPv6,模糊匹配 |
| terminalMac | string | 否 | 终端 MAC 地址,模糊匹配 |
| terminalPlatform | arraystring | 否 | 终端平台列表,如 Windows、Linux、Android |
| tunnelClientIp | string | 否 | 隧道客户端 IP,模糊匹配 |
| accessServerName | string | 否 | 接入设备名称,模糊匹配 |
| accessServerIp | string | 否 | 接入设备 IP,模糊匹配 |
| serviceSet | string | 否 | 服务集(SSID 名称),模糊匹配 |
| apGroupLocation | string | 否 | AP 组位置,模糊匹配 |
| apLocation | string | 否 | AP 位置,模糊匹配 |
| apMac | string | 否 | AP MAC 地址,模糊匹配 |
| type | arrayinteger | 否 | 会话类型:1 强认证、2 Portal、3 802.1X 随机账号、4 NDA 计算机认证、5 UC、6 NDA |
| state | arrayinteger | 否 | 会话状态列表 |
| signonType | arraystring | 否 | 登录方式标识列表,如 userPassword、sms、qrCode、ndaSso |
| eap | boolean | 否 | 是否为 802.1X 会话 |
| isPortalRevisitLogin | boolean | 否 | 是否 Portal 免认证 |
| isBackgroundMacAuth | boolean | 否 | 是否后台 MAC 认证 |
| isNewUser | boolean | 否 | 是否新用户 |
| startTime | integerint64 | 否 | 查询开始时间,Unix 毫秒时间戳;0 按未传处理 |
| endTime | integerint64 | 否 | 查询结束时间,Unix 毫秒时间戳;0 按未传处理 |
| orderBy | string | 否 | 排序字段 |
| order | string | 否 | 排序方向,如 asc、desc |
| firstResult | integer | 是 | 分页起始位置 |
| maxResults | integer | 是 | 最大返回数量 |
数组参数通过重复同名 Query 参数传递,例如 type=1&type=2。
成功响应:
| JSON { "success": true, "errorCode": 0, "data": { "totalCount": 1, "data": \{ "sessionId": "\ "type": 1, "state": 200, "tenantId": "\ "tenantName": "示例站点", "identityStoreId": "\ "identityStoreName": "本地用户源", "userId": "\ "userLoginName": "zhangsan", "terminalIp": "10\.0\.0\.10", "terminalMac": "AA:BB:CC:DD:EE:FF", "accessServerName": "接入设备", "portalTypeUuid": "userPassword", "portalType": "用户名密码", "encodedTokens": "", "cLoginTime": 1784084235000, "cLastActiveTime": 1784084235000, "messages": \[ } ] }, "message": null } |
|---|
返回会话对象由 AccessSessionInfo.toJson\(\) 生成,并额外补充 identityStoreName、
encodedTokens;嵌套的 accessServer 对象会移除 sharedSecret。
请求: GET /am/rest/p/1/identity/user/infos 或 POST /am/rest/p/1/identity/user/infos
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员密码 |
| tenantName | 是 | 站点名称 |
| identityStoreName | 是 | 用户源名称 本地用户源:06bc758e-04f2-40b3-9d6c-562b115aeb3c 外部用户源:和创建的外部用户源名称一致 |
| type | 是 | 查找方式 all:所有 updateTime:用户更新时间 |
| firstResult | 是 | 返回的第一条数据,在数据库中的位置,int类型,最小值0 |
| maxResult | 是 | 返回的最大条数,int类型 |
| startUpdateTime | 用户更新时间,起始时间,时间戳毫秒 需要和endUpdateTime一起使用 |
|
| endUpdateTime | 用户更新时间,结束时间,时间戳毫秒 需要和startUpdateTime一起使用 |
| 响应示例 |
|---|
| JSON { "success": true, "errorCode": 0, "data": { "totalCount": 8, "startRow": 0, "data": \[\] }, "message": null } |
|---|
| 响应参数 | 说明 |
|---|---|
| totalCount | 数据库中的数据总条数 |
| startRow | 和入参的firstResult相等 |
| data | 用户信息,UserInfo数组 |
请求: GET /am/rest/p/1/identity/user/unbindUserTerminals 或 POST /am/rest/p/1/identity/user/unbindUserTerminals
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员密码 |
| tenantName | 是 | 站点名称 |
| identityStoreName | 是 | 用户源名称 本地用户源:06bc758e-04f2-40b3-9d6c-562b115aeb3c 外部用户源:和创建的外部用户源名称一致 |
| loginName | 是 | 用户登录名 |
| deleteFingerprint |
是否删除指纹库的MAC地址 默认值false:不删除 |
| 响应示例 |
|---|
| JSON { "success": true, "errorCode": 0, "data": null, "message": null } |
|---|
请求: GET /am/rest/p/1/identity/user/bindUserTerminals 或 POST /am/rest/p/1/identity/user/bindUserTerminals
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员密码 |
| tenantName | 是 | 站点名称 |
| identityStoreName | 是 | 用户源名称 本地用户源:06bc758e-04f2-40b3-9d6c-562b115aeb3c 外部用户源:和创建的外部用户源名称一致 |
| loginName | 是 | 用户登录名 |
| unbindPrevious | 是否解绑用户以前的终端 默认为true,绑定前先解绑以前的用户终端 |
|
| macAddresses | 是 | 绑定的MAC地址列表 示例:"D0:25:98:35:C3:62", "10:45:F8:35:CC:E1" |
| 响应示例 |
|---|
| JSON { "requestId": null, "success": true, "errorCode": 0, "errorId": null, "data": null, "message": null } |
|---|
请求: GET /am/rest/p/1/identity/user/applyTemporaryUser 或 POST /am/rest/p/1/identity/user/applyTemporaryUser
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员密码 |
| tenantName | 是 | 站点名称 |
| identityStoreName | 是 | 用户源名称 默认本地用户源名:06bc758e-04f2-40b3-9d6c-562b115aeb3c 外部用户源:和创建的外部用户源名称一致 |
| applierLoginName | 是 | 申请人登录名,需要提前配置 |
| sendAccountTo | 是 | 1:发送到手机(临时用户手机) 2:发送到邮箱(临时用户邮箱) |
| mobile | (sendAccountTo=1时,必填,作为登录账号)手机号 | |
| (sendAccountTo=2时,必填,作为登录账号)邮箱 | ||
| sendToApplier | 发给申请人邮箱(默认false) | |
| sendToTemporaryUser | sendAccountTo=2时,发给临时用户邮箱(默认true) | |
| startTime | 是 | 有效期,起始时间,时间戳,毫秒 |
| endTime | 是 | 有效期,结束时间,时间戳,毫秒 |
| roleName | 角色(需要是认证系统中已经存在的角色) | |
| personalName | 姓名 | |
| number | 证件号码(工号,护照等) | |
| idCardNumber | 身份证号码 | |
| company | 公司 | |
| description | 描述 |
| 响应示例 |
|---|
| JSON { "success": true, "errorCode": 0, "data": \[\], "message": null } |
|---|
| HTTP POST {baseUrl}/am/api/admin/tenant/identity/user/delete |
|---|
认证:Basic Auth。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tenantId | string | 是 | 站点 ID |
| identityStoreId | string | 是 | 用户源 ID |
| parentGroupId | string | 否 | 用户当前所在组织 ID;用于组织级写权限校验 |
| userId | string | 是 | 用户 ID |
| writeToExternal | boolean | 否 | 是否同步删除外部用户源中的用户,默认 false |
| forceDelete | boolean | 否 | 存在访客审批引用时是否强制删除,默认 false |
| JSON { "tenantId": "<tenant-id>", "identityStoreId": "<identity-store-id>", "parentGroupId": "<parent-group-id>", "userId": "<user-id>", "writeToExternal": false, "forceDelete": false } |
|---|
成功响应为通用无 data 响应。存在访客审批引用且未强制删除时,返回 DELETE_CONFIRM \-5001。
| HTTP POST {baseUrl}/am/rest/p/2/identity/user/incSync |
|---|
Query 参数:adminLoginName、adminPassword、tenantName,均为必填字符串。
请求体:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tenantName | string | 是 | 站点名称 |
| identityStoreName | string | 是 | 用户源名称默认本地用户源名:06bc758e\-04f2\-40b3\-9d6c\-562b115aeb3c |
| updateRole | boolean | 否 | 是否同步角色,默认 true |
| useReverseSync | boolean | 否 | 是否通过匹配的 Hub 配置执行反向同步,默认 false |
| user | UserInput | 是 | 用户数据 |
| JSON { "tenantName": "<tenant-name>", "identityStoreName": "<identity-store-name>", "updateRole": true, "useReverseSync": false, "user": { "externalUserId": "<external-user-id>", "loginName": "zhangsan", "personalName": "张三", "password": "<user-password>", "mobiles": "\ "roles": "研发人员", "groupPath": "/研发部", "enabled": true, "customAttributes": \{ "name": "entryUUID", "value": "\ "type": 1 \} } } |
|---|
成功响应:通用响应结构,data 为同步后的用户对象。
| HTTP POST {baseUrl}/am/rest/p/2/identity/user/add |
|---|
Query 参数和请求体与“增量同步用户 V2”相同。成功响应的 data 为新增后的用户对象。
| HTTP POST {baseUrl}/am/rest/p/2/identity/user/update |
|---|
Query 参数:adminLoginName、adminPassword、tenantName,均为必填字符串。
请求体结构与“增量同步用户 V2”一致;更新时必须提供可定位用户的标识。updateRole 默认为 true,useReverseSync 默认为 false:
| JSON { "tenantName": "<tenant-name>", "identityStoreName": "<identity-store-name>", "updateRole": false, "useReverseSync": false, "user": { "userId": "<user-id>", "externalUserId": "<external-user-id>", "loginName": "zhangsan", "personalName": "张三", "enabled": true } } |
|---|
| updateRole 默认值为 true;useReverseSync=true 时必须存在站点名和用户源名均匹配的 Hub 配置。 |
|---|
成功响应的 data 为更新后的用户对象。
请求: GET /am/api/admin/tenant/identity/user/password/expireTime
认证:Basic Auth。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tenantId | string | 是 | 站点ID |
| identityStoreId | string | 否 | 用户源ID |
| parentGroupId | string | 否 | 用户组ID |
| userId | string | 是 | 用户 ID |
说明:用户组ID与用户源ID不能都不传,必须传其中之一
成功响应示例:
| JSON { "success": true, "errorCode": 0, "data": 1678098781000,//密码过期时间 "message": null } |
|---|
失败响应示例:
| JSON { "success": false, "errorCode": -6, "message": "Target cannot be null" } |
|---|
请求: GET /am/rest/p/1/identity/user/resetPassword
认证:Basic Auth。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tenantName | string | 是 | 站点名 |
| identityStoreName | string | 是 | 用户源名默认本地用户源名:06bc758e\-04f2\-40b3\-9d6c\-562b115aeb3c |
| loginName | string | 是 | 用户名 |
| password | string | 是 | 密码 |
| needPasswordPolicy | boolean | 否 | 是否使用密码复杂度策略,不传默认使用 |
成功响应示例:
| JSON { "requestId": null, "success": true, "errorCode": 0, "errorId": null, "data": null, "message": null } |
|---|
失败响应示例:
| JSON { "requestId": null, "success": false, "errorCode": -1, "errorId": null, "data": null, "message": "IdentityStore does not exist" } |
|---|
| HTTP POST {baseUrl}/am/api/admin/tenant/identity/group/add |
|---|
认证:Basic Auth。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 用户组名称 |
| identityStoreId | string | 是 | 用户源 ID |
| parentGroupId | string | 否 | 父组织 ID;为空时创建根组织 |
| externalGroupId | string | 否 | 外部组织 ID |
| attributes | array | 否 | 扩展属性 |
| JSON { "name": "研发一组", "identityStoreId": "<identity-store-id>", "parentGroupId": "<parent-group-id>" } |
|---|
成功响应:
| JSON { "success": true, "errorCode": 0, "message": null } |
|---|
| HTTP GET {baseUrl}/am/api/admin/tenant/identity/group/list?identityStoreId=<identity-store-id> |
|---|
认证:Basic Auth。
| Query 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| identityStoreId | string | 是 | 用户源 ID |
成功响应:
| JSON { "success": true, "errorCode": 0, "data": \{ "createTime": 1678072180622, "updateTime": 1678072180622, "entityVersion": 0, "id": "\ "identityStoreId": "\ "name": "研发部", "children": \[ \{ "id": "\ "identityStoreId": "\ "parentGroupId": "\ "name": "研发一组", "children": \[ } ] } ], "message": null } |
|---|
| HTTP POST {baseUrl}/am/api/admin/tenant/identity/group/update |
|---|
认证:Basic Auth。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | string | 是 | 组织 ID;服务端据此读取现有组织及所属用户源 |
| name | string | 是 | 组织名称,不可为空 |
| parentGroupId | string | 否 | 新的父组织 ID;为空时移动为根组织 |
| externalGroupId | string | 否 | 外部组织 ID |
| attributes | array | 否 | 扩展属性;属性元素包含 name 与 value |
identityStoreId 无需传入,服务端会根据 id 查询现有组织并补入所属用户源。父组织必须与
当前组织属于同一用户源,且调用方必须同时具备原父组织与新父组织的写权限。
| JSON { "id": "<group-id>", "name": "研发一组", "parentGroupId": "<parent-group-id>", "externalGroupId": "<external-group-id>", "attributes": \{ "name": "costCenter", "value": "RD" \} } |
|---|
成功响应为通用无 data 响应。
| HTTP GET {baseUrl}/am/api/admin/tenant/identity/role/list |
|---|
认证:继承角色目录的父级认证,即 Basic Auth。
| Query 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tenantId | string | 是 | 站点 ID |
| keyword | string | 否 | 搜索关键词 |
| firstResult | integer | 是 | 分页起始位置 |
| maxResults | integer | 是 | 最大返回数量 |
成功响应:
| JSON { "success": true, "errorCode": 0, "data": \{ "createTime": 1787038780000, "updateTime": 1787038780000, "entityVersion": 0, "id": "\ "tenantId": "\ "name": "testRole1", "description": "测试角色", "fromIdentityStoreId": "\ "attributes": \[ } ], "message": null } |
|---|
| HTTP POST {baseUrl}/am/api/admin/tenant/identity/role/add |
|---|
认证:继承角色目录的父级认证,即 Basic Auth。
| JSON { "tenantId": "<tenant-id>", "role": { "id": "", "name": "testRole2", "fromIdentityStoreId": "<identity-store-id>", "description": "测试角色", "attributes": \[\], "members": \[\], "tenantId": "<tenant-id>" } } |
|---|
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tenantId | string | 是 | 站点 ID |
| role | RoleInput | 是 | 角色数据 |
成功响应的 data 为创建后的角色对象。
| HTTP POST {baseUrl}/am/api/admin/tenant/identity/role/update |
|---|
认证:继承角色目录的父级认证,即 Basic Auth。
| JSON { "tenantId": "<tenant-id>", "role": { "id": "<role-id>", "tenantId": "<tenant-id>", "name": "testRole11", "description": "测试角色", "fromIdentityStoreId": "<identity-store-id>", "attributes": \[\], "members": \[\] } } |
|---|
成功响应:
| JSON { "success": true, "errorCode": 0, "message": null } |
|---|
请求: GET /am/rest/p/1/token/binding/list 或 POST /am/rest/p/1/token/binding/list
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员密码 |
| tenantName | 是 | 站点名称 |
| 以下两种方式二选一 |
|---|
(1)根据用户登录名,查询该用户绑定的令牌
| 请求参数 | 必填 | 说明 |
|---|---|---|
| identityStoreName | 是 | 用户源名称 本地用户源:06bc758e-04f2-40b3-9d6c-562b115aeb3c 外部用户源:和创建的外部用户源名称一致 |
| loginName | 是 | 用户登录名 |
(2)根据令牌序列号,查询该令牌绑定的用户
| 请求参数 | 必填 | 说明 |
|---|---|---|
| type | 是 | 令牌类型 1:时间令牌 2:短信令牌 |
| serial | 是 | 令牌序列号 |
| 响应示例 |
|---|
| JSON { "success": true, "errorCode": 0, "data": \[\], "message": null } |
|---|
| 响应参数 | 说明 |
|---|---|
| data | TokenBinding数组 |
请求: GET /am/rest/p/1/token/mobileToken/deliver 或 POST /am/rest/p/1/token/mobileToken/deliver
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员密码 |
| tenantName | 是 | 站点名称 |
| identityStoreName | 是 | 用户源名称 本地用户源:06bc758e-04f2-40b3-9d6c-562b115aeb3c 外部用户源:和创建的外部用户源名称一致 |
| loginName | 是 | 用户登录名 |
| mode | 是 | 派发模式 0:派发到邮箱 1:派发到手机短信 2:仅绑定 |
| unbindPrevious | 是否解绑以前的令牌 默认值true:解绑 |
|
| toEmail | 激活码接收邮箱。如果不填写,激活码发送到用户默认邮箱中;如果用户没有默认邮箱,则必须填写 | |
| toMobile | 激活码接收手机号。如果不填写,激活码发送到用户默认手机号中;如果用户没有默认手机号,则必须填写 | |
| expireInDays | 激活码有效期(天)。如果不填写,则按照站点名称所对应站点内配置的激活码有效期为准 | |
| tokenExpireInDays | 令牌有效期(天)。如果不填写,则按照站点名称所对应站点内配置的激活码有效期为准 | |
| tokenBindingStartDelayHours | 令牌延迟启用(小时)。如果不填写,则按照站点名称所对应站点内配置的令牌延迟启用为准 |
| 响应示例 |
|---|
| JSON { "success": true, "errorCode": 0, "data": null, "message": null } |
|---|
| 响应参数 | 说明 |
|---|---|
| data | 令牌信息,TokenInfo |
请求: GET /am/rest/p/1/token/mobileToken/userQrCode 或 POST /am/rest/p/1/token/mobileToken/userQrCode
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员密码 |
| tenantName | 是 | 站点名称 |
| identityStoreName | 是 | 用户源名称 本地用户源:06bc758e-04f2-40b3-9d6c-562b115aeb3c 外部用户源:和创建的外部用户源名称一致 |
| loginName | 是 | 用户登录名 |
| 响应示例 |
|---|
!4DKEY AM API\.assets/4\.png
请求: GET /am/rest/p/1/token/mobileToken/bindAndWriteMobileTokenQrCode 或 POST /am/rest/p/1/token/mobileToken/bindAndWriteMobileTokenQrCode
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员密码 |
| tenantName | 是 | 站点名称 |
| identityStoreName | 是 | 用户源名称 本地用户源:06bc758e-04f2-40b3-9d6c-562b115aeb3c 外部用户源:和创建的外部用户源名称一致 |
| loginName | 是 | 用户登录名 |
| bindingEnabled | 用户和令牌的绑定关系是否有效 默认值false:虽然绑定了,但是是无效的 |
| 响应示例 |
|---|
!5DKEY AM API\.assets/5\.png
请求: GET /am/rest/p/1/token/mobileToken/completeMobileTokenBinding 或 POST /am/rest/p/1/token/mobileToken/completeMobileTokenBinding
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员登录密码 |
| tenantName | 是 | 站点名称 |
| identityStoreName | 是 | 用户源名称 本地用户源:06bc758e-04f2-40b3-9d6c-562b115aeb3c 外部用户源:和创建的外部用户源名称一致 |
| loginName | 是 | 用户登录名 |
| password | 是 | 令牌动态口令 |
| unbindPrevious | 是否解绑以前的手机令牌 默认值false:不解绑 |
| 响应示例 |
|---|
| JSON { "success": true, "errorCode": 0, "data": null, "message": null } |
|---|
请求: GET /am/rest/p/1/token/bind 或 POST /am/rest/p/1/token/bind
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员密码 |
| tenantName | 是 | 站点名称 |
| identityStoreName | 是 | 用户源名称 本地用户源:06bc758e-04f2-40b3-9d6c-562b115aeb3c 外部用户源:和创建的外部用户源名称一致 |
| loginName | 是 | 用户登录名 |
| serial | 是 | 令牌序列号 |
| 响应示例 |
|---|
| JSON { "success": true, "errorCode": 0, "data": null, "message": null } |
|---|
请求: GET /am/rest/p/1/token/unbind 或 POST /am/rest/p/1/token/unbind
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员密码 |
| tenantName | 是 | 站点名称 |
| identityStoreName | 是 | 用户源名称 本地用户源:06bc758e-04f2-40b3-9d6c-562b115aeb3c 外部用户源:和创建的外部用户源名称一致 |
| loginName | 是 | 用户登录名 |
| serial | 是 | 令牌序列号 |
| 响应示例 |
|---|
| JSON { "success": true, "errorCode": 0, "data": null, "message": null } |
|---|
请求: GET /am/rest/p/1/token/unbindAll 或 POST /am/rest/p/1/token/unbindAll
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员密码 |
| tenantName | 是 | 站点名称 |
| identityStoreName | 是 | 用户源名称 本地用户源:06bc758e-04f2-40b3-9d6c-562b115aeb3c 外部用户源:和创建的外部用户源名称一致 |
| loginName | 是 | 用户登录名 |
| 响应示例 |
|---|
| JSON { "success": true, "errorCode": 0, "data": null, "message": null } |
|---|
请求: GET /am/rest/p/1/token/mobileToken/data 或 POST /am/rest/p/1/token/mobileToken/data
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员密码 |
| tenantName | 是 | 站点名称 |
| serial | 是 | 令牌序列号 |
| 响应示例 |
|---|
| JSON { "success": true, "errorCode": 0, "data": { "model": 4, "serial": "000004", "crypto": 1, "seed": "7d79cf3815be526b543f9d475ccaf8402f289f27", "timeStep": 60, "passwordLength": 6, "expireTime": 3281827405000 }, "message": null } |
|---|
| 响应参数 | 说明 |
|---|---|
| model | 固定为4,代表手机令牌 |
| serial | 令牌序列号 |
| crypto | 令牌算法 1:OATH 2:SM3 |
| seed | 种子 |
| timeStep | 令牌时间步进,单位秒 |
| passwordLength | 动态口令长度 |
| expireTime | 令牌过期时间 |
请求: GET /am/rest/p/1/tenant/list 或 POST /am/rest/p/1/tenant/list
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员密码 |
| 响应示例 |
|---|
| JSON { "success": true, "errorCode": 0, "data": \{ "id": "8de4afd9\-2506\-47e5\-91bf\-30a10596b535", "name": "测试" \}, "message": null } |
|---|
| 响应参数 | 说明 |
|---|---|
| id | 站点id |
| name | 站点名称 |
请求: GET /am/rest/p/1/identity/blackWhiteMacAddressList/add 或 POST /am/rest/p/1/identity/blackWhiteMacAddressList/add
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员密码 |
| tenantName | 是 | 站点名字 |
| macAddress | 是 | Mac地址 |
| type | 是 | 1:禁止 2:有效 |
| startDate | 有效开始时间毫秒时间戳 | |
| endDate | 有效结束时间毫秒时间戳 | |
| description | 描述 |
tips:有效开始时间与有效结束时间都不填时视为永久
响应示例:
| { "requestId": null, "success": true, "errorCode": 0, "data": null, "message": null } |
|---|
| POST am/rest/p/1/identity/blackWhiteMacAddressList/list/replace |
|---|
| 请求参数 | 必填 | 说明 |
|---|---|---|
| adminLoginName | 是 | 管理员登录名 |
| adminPassword | 是 | 管理员密码 |
| tenantName | 是 | 站点名字 |
| macAddressList | 是 | json字符串对应对象 |
请求示例
| POST am/rest/p/1/identity/blackWhiteMacAddressList/list/replaceadminLoginName=admin&adminPassword=admin |
|---|
请求体示例
| { "tenantName": "test", "macAddressList": \{ "macAddress": "F4:96:34:91:CE:F9", "type": 2, "description": "示例终端", "enablement": \{ "enabled": false, "startTime": null, "endTime": null \} \}, \{ "macAddress": "00:E0:4C:36:01:44", "type": 2, "description": "示例终端", "enablement": \{ "enabled": false, "startTime": null, "endTime": null \} \} } |
|---|
响应示例
| { "success": true, "errorCode": 0, "message": null } |
|---|
| HTTP GET {baseUrl}/am/api/admin/tenant/identity/macList/list |
|---|
认证:Basic Auth。
| Query 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tenantId | string | 是 | 站点 ID |
| firstResult | integer | 是 | 分页起始位置 |
| maxResults | integer | 是 | 最大返回数量 |
成功响应的 data 为分页对象:startRow、totalCount、data\[\];列表集元素包含
id、tenantId、name、createTime、updateTime、entityVersion。
| HTTP GET {baseUrl}/am/api/admin/tenant/identity/macList/macItem/list |
|---|
| Query 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| macListId | string | 是 | MAC 列表集 ID |
| firstResult | integer | 是 | 分页起始位置 |
| maxResults | integer | 是 | 最大返回数量 |
成功响应为分页对象。
| HTTP POST {baseUrl}/am/api/admin/tenant/identity/macList/add |
|---|
| JSON { "tenantId": "<tenant-id>", "name": "列表集名称", "description": "" } |
|---|
| HTTP POST {baseUrl}/am/api/admin/tenant/identity/macList/update |
|---|
请求体在新增结构基础上增加必需的列表集 id;tenantId 应保持为原列表集所属站点。
| JSON { "tenantId": "<tenant-id>", "id": "<mac-list-id>", "name": "列表集名称", "description": "" } |
|---|
| HTTP POST {baseUrl}/am/api/admin/tenant/identity/macList/delete |
|---|
| JSON { "id": "<mac-list-id>" } |
|---|
| HTTP POST {baseUrl}/am/api/admin/tenant/identity/macList/macItem/add |
|---|
| JSON { "macListId": "<mac-list-id>", "macAddress": "AA:AA:AA:BB:BB:BB", "description": "" } |
|---|
| HTTP POST {baseUrl}/am/api/admin/tenant/identity/macList/macItem/update |
|---|
请求体字段:终端记录 id(必填)、macAddress(必填)、description(可选)。所属 macListId 由服务端按现有记录确定。
| HTTP POST {baseUrl}/am/api/admin/tenant/identity/macList/macItem/delete |
|---|
请求体仅需终端记录 id;站点与所属列表集由服务端按现有记录确定。
| HTTP GET {baseUrl}/am/api/admin/tenant/identity/macList/macItem/search |
|---|
| Query 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tenantId | string | 是 | 站点 ID |
| macListId | arraystring | 否 | MAC 列表集 ID 列表;为空时搜索站点全部列表集 |
| keyword | string | 是 | 搜索关键字 |
| firstResult | integer | 是 | 分页起始位置 |
| maxResults | integer | 是 | 最大返回数量 |
成功响应的 data.data\[\] 元素包含 id、macListId、macAddress、description、
createTime、updateTime 和 entityVersion。
以上新增、编辑和删除接口均继承 Basic Auth。成功响应均为:
| JSON { "success": true, "errorCode": 0, "message": null } |
|---|
| JSON { "userId": "f5e85d18-d126-4083-ab9d-d87ff7c1d101", "personalName": "", "loginName": "0", "mobiles": \[\], "email": null, "groupPath": "a/b/c", "roles": \[\], "enabled": true, "startTime": null, "endTime": null, "number": null, "idCardNumber": null, "department": null, "company": null, "customAttributes": \{ "name": "IP", "value": "127\.0\.0\.1" \} } |
|---|
| 响应参数 | 类型 | 说明 |
|---|---|---|
| userId | String | 用户ID |
| personalName | String | 姓名 |
| loginName | String | 登录名 |
| mobiles | String数组 | 手机号 |
| String | 邮箱 | |
| groupPath | String | 用户组,组与组织间使用/分隔 |
| roles | String数组 | 角色 |
| enabled | Boolean | 是否启用 |
| startTime | 时间戳,毫秒 | 有效期,起始时间 |
| endTime | 时间戳,毫秒 | 有效期,结束时间 |
| number | String | 工号 |
| idCardNumber | String | 身份证号 |
| department | String | 部门 |
| company | String | 公司 |
| customAttributes | 数组 | 自定义属性 name:属性名称String value:属性值String |
| JSON { "type": 1, "model": 4, "serial": "000015", "expireTime": 3275184982695 } |
|---|
| 响应参数 | 类型 | 说明 |
|---|---|---|
| type | int | 1:时间令牌 2:短信令牌 |
| model | int | type=1时: 2:硬件令牌 4:APP手机令牌 type=2时: 1:短信令牌 |
| serial | String | 令牌序列号如果是短信令牌,则是手机号 |
| expireTime | 时间戳,毫秒 | 令牌到期时间 |
| JSON { "id": "508b6052-0655-48d1-ae83-8f30a43ba045", "bindingEnabled": true, "startTime": 1579062850000, "priority": 0, "user": { ...... }, "token": { ...... } } |
|---|
| 响应参数 | 类型 | 说明 |
|---|---|---|
| id | String | 绑定关系id |
| bindingEnabled | Boolean | 绑定关系是否是有效的 |
| startTime | 时间戳,毫秒 | 绑定关系生效的开始时间 |
| priority | int | 优先级 |
| user | UserInfo | 用户信息 |
| token | TokenInfo | 令牌信息 |
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| userId | string | 否 | 用户 ID;更新或同步时按业务需要传入 |
| externalUserId | string | 是 | 外部用户 ID |
| loginName | string | 是 | 登录名 |
| personalName | string | 否 | 姓名 |
| userPrincipalName | string | 否 | 用户主体名称 |
| alias | string | 否 | 别名 |
| password | string | 否 | 用户密码 |
| mobile | string | 否 | 手机号,与 mobiles 二选一 |
| mobiles | arraystring | 否 | 手机号列表 |
| string | 否 | 邮箱 | |
| role | string | 否 | 角色名称,与 roles 二选一 |
| roles | arraystring | 否 | 角色名称列表 |
| groupPath | string | 否 | 组织路径 |
| groupId | string | 否 | 组织 ID |
| enabled | boolean | 否 | 是否启用 |
| startTime | integerint64 | 否 | 生效时间,Unix 毫秒时间戳 |
| endTime | integerint64 | 否 | 失效时间,Unix 毫秒时间戳 |
| locked | boolean | 否 | 是否锁定 |
| unlockTime | integerint64 | 否 | 解锁时间,Unix 毫秒时间戳 |
| passwordUpdateTime | integerint64 | 否 | 密码更新时间,Unix 毫秒时间戳 |
| changePasswordAtNextLogin | boolean | 否 | 下次登录时是否修改密码 |
| idCardNumber | string | 否 | 身份证号 |
| number | string | 否 | 工号 |
| department | string | 否 | 部门 |
| company | string | 否 | 公司 |
| title | string | 否 | 岗位 |
| createTime | integerint64 | 否 | 创建时间,Unix 毫秒时间戳 |
| updateTime | integerint64 | 否 | 更新时间,Unix 毫秒时间戳 |
| customAttributes | arrayCustomAttribute | 否 | 扩展属性 |
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 属性名 |
| value | string | 否 | 字符串值 |
| type | integer | 否 | 1=string,2=boolean,3=long |
| booleanValue | boolean | 否 | 布尔值 |
| longValue | integerint64 | 否 | 长整型值 |
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | string | 更新时是 | 角色 ID |
| tenantId | string | 是 | 站点 ID |
| name | string | 是 | 角色名称 |
| description | string | 否 | 角色说明 |
| fromIdentityStoreId | string | 否 | 来源用户源 ID |
| attributes | array | 否 | 扩展属性 |
| members | array | 否 | 角色成员 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | MAC 列表集 ID |
| tenantId | string | 站点 ID |
| name | string | 列表集名称 |
| description | string | 说明 |
| createTime | integerint64 | 创建时间,Unix 毫秒时间戳 |
| updateTime | integerint64 | 更新时间,Unix 毫秒时间戳 |
| entityVersion | integer | 实体版本 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 终端记录 ID |
| macListId | string | 所属 MAC 列表集 ID |
| macAddress | string | MAC 地址 |
| description | string | 说明 |
| createTime | integerint64 | 创建时间,Unix 毫秒时间戳 |
| updateTime | integerint64 | 更新时间,Unix 毫秒时间戳 |
| entityVersion | integer | 实体版本 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 日志 ID |
| tenantId | string | 站点 ID |
| loginName | string | 登录名 |
| terminalIp | string | 终端 IP |
| accessServerName | string | 设备名称 |
| accessServerIp | string | 设备 IP |
| accessServerId | string | 设备 ID |
| accessServerBrand | string | 设备品牌 |
| command | string | 命令 |
| privilegeLevel | string | 权限级别 |
| result | integer | 1 成功,0 失败 |
| recordType | integer | 记录类型 |
| createTime | integerint64 | 创建时间,Unix 毫秒时间戳 |
| createTimeInMicroseconds | integerint64 | 创建时间,微秒精度 |
登录会话对象由 AccessSessionInfo.toJson\(\) 生成,并由列表接口补充用户源名称与已通过令牌。
完整返回还可包含嵌套的 tenant、user、accessServer、accessRealm、AP、IP 段及扩展信息。
| 字段 | 类型 | 说明 |
|---|---|---|
| sessionId | string | 会话 ID |
| type | integer | 登录类型 |
| state | integer | 会话状态 |
| tenantId | string | 站点 ID |
| tenantName | string | 站点名称 |
| identityStoreId | string | 用户源 ID |
| identityStoreName | string | 用户源名称 |
| userId | string | 用户 ID |
| userIdentity | string | 用户身份 |
| userLoginName | string | 用户登录名 |
| terminalIp | string | 终端 IP |
| terminalMac | string | 终端 MAC |
| accessServerName | string | 接入设备名称 |
| accessRealmId | string | 认证域 ID |
| portalTypeUuid | string | 登录方式标识,即请求筛选参数 signonType 对应值 |
| portalType | string | 登录方式显示名称 |
| encodedTokens | string | 已通过令牌序列号,以分号分隔 |
| cLoginTime | integerint64 | 登录时间 |
| cLastActiveTime | integerint64 | 最后活跃时间 |
| messages | arraystring | 会话消息 |
业务结果通过响应体中的 success 和 errorCode 判断:
success=true 且 errorCode=0:成功。
success=true 且 errorCode!=0:部分成功或需要进一步处理。
success=false:失败,具体原因以 errorCode 和 message 为准。
| errorCode | 常量 | 说明 |
|---|---|---|
| 1 | OUT_OF_SYNC | 不同步 |
| 0 | SUCCESS | 成功 |
| 10002 | - | 登录不被允许 |
| 10005 | - | 用户没有绑定令牌,禁止登录 |
| -1 | NOT_EXIST | 不存在 |
| -2 | DUPLICATE | 重复 |
| -3 | INVALID_ARGUMENT | 无效的参数 |
| -4 | NOT_PERMITTED | 不允许 |
| -5 | CANNOT_COMPLETE_OPERATION | 无法完成操作 |
| -6 | SYSTEM_ERROR | 系统错误 |
| -7 | VERSION_NOT_SUPPORTED | 版本不支持 |
| -8 | BAD_REQUEST | 错误的请求 |
| -9 | CONNECTION_ERROR | 连接错误 |
| -10 | ILLEGAL_STATE | 非法状态 |
| -11 | INVALID_BINDING | 无效的绑定 |
| -12 | OPERATION_NOT_SUPPORTED | 不支持的操作 |
| -13 | LICENSE_ERROR | 证书错误 |
| -14 | ILLEGAL_IDENTITY | 非法身份 |
| -15 | INVALID_TICKET | 无效的票证 |
| -16 | INCORRECT_LOGIN_NAME_OR_PASSWORD | 登录名或密码错误 |
| -17 | USER_LOCKED | 用户锁定 |
| -170 | TERMINAL_LOCKED | 终端锁定 |
| -19 | USER_PERMANENT_LOCKED | 用户永久锁定 |
| -190 | TERMINAL_PERMANENT_LOCKED | 终端永久锁定 |
| -21 | PASSWORD_INVALID | 无效的密码 |
| -2101 | DYNAMIC_PASSWORD_ERROR | 动态密码错误 |
| -2102 | DYNAMIC_PASSWORD_INVALID | 动态密码无效 |
| -22 | LOGON_NOT_ALLOWED_AT_THIS_TIME | 当前不允许登录 |
| -23 | LOGIN_NOT_ALLOWEB_ON_THIS_WORKSTATION | 此站点不允许登录 |
| -24 | USER_MUST_RESET_PASSWORD | 用户必须重置密码 |
| -25 | USER_PASSWORD_EXPIRED | 用户密码已过期 |
| -26 | PORTAL_TERMINAL_AUTHORITY_EXCEEDED | portal终端超出授权 |
| -27 | SSO_ERROR | 单点登录错误 |
| -28 | AUDIT_PROXY_ERROR | 审计代理错误 |
| -29 | IDP_NOT_REGISTER | 身份提供商未注册 |
| -30 | ACTIVATION_CODE_REUSE | 激活码重复使用 |
| -31 | INVALID_CONFIG | 无效的配置 |
| -32 | PUSH_AUTH_REJECT | 推送认证拒绝 |
| -33 | IP_BLOCKED | IP被封锁 |
| -34 | SESSION_TIMEOUT | 会话超时 |
| -35 | PUSH_AUTH_ERROR | 推送认证错误 |
| -36 | REJECTED_EXECUTION | 拒绝执行 |
| -37 | AUTHENTICATION_TIMEOUT | 身份验证超时 |
| -38 | USER_IS_NULL | 无此用户 |
| -39 | LICENSE_EXCEEDED | 授权超出 |
| -40 | QUOTA_EXCEEDED | 配额超出 |
| -41 | RATE_LIMITING | 限流中 |
| -42 | AUTH_NOT_PERMITTED | 认证功能权限受限 |
| -43 | INCOMPLETE_SUCCESS | 不完全成功 |
| -1001 | USER_IS_DISABLED | 用户已禁用 |
| -1002 | USER_PASSWORD_REUSE_EXCEEDS_SETTING | 密码重用超过设定次数 |
| -1003 | USER_IS_EXPIRED | 用户已过期 |
| -2001 | CAPTCHE_NULL | 验证码为空 |
| -2002 | CAPTCHE_ERROR | 验证码错误 |
| -2003 | CAPTCHE_EXPIRED | 验证码过期 |
| -2103 | NOT_MATCH_PASSWORD_CONDITION | 不满足密码条件 |
| -2104 | CONFIRM_PASSWORD_ERROR | 确认密码错误 |
| -3001 | INVALID_INTERFACE | 无效的接口 |
| -3002 | INVALID_FILTER | 无效的过滤器 |
| -4001 | INVALID_MOBILE_TOKEN | 已失效的手机令牌 |
| -4002 | ACTIVATION_CODE_ILLEGAL | 已过期或失效的手机令牌激活码 |
| -10001 | DELETE_ERROR_REFERENCED_BY_OTHER_MODULE | 删除失败,被其他模块引用 |
| -5001 | DELETE_CONFIRM | 删除确认 |
| -7001 | USER_SELF_REGISTER_SUCCESS_BUT_NOTIFY_FAILED | 用户自注册成功,但通知失败 |
| -10000 | NDA_GENERATE_SIGN_FAILED | 生成签名失败(鉴权第一步,在UC上面生成签名) |
| -10001 | NDA_REPEAT_NONCE | nonce重放攻击保护 |
| -10002 | NDA_TIME_DIFF_TOO_LONG | 时间差过大 |
| -10003 | NDA_APP_NOT_FOUND | 应用未找到(鉴权第二步,请求获取UserCode,根据appId查找app) |
| -10004 | NDA_VERIFY_SIGN_FAILED | 签名验证失败(鉴权第二步,请求获取UserCode,验证签名) |
| -10005 | NDA_USER_CERT_NOT_EXIST | 用户证书不存在(鉴权第二步,请求获取UserCode,查找用户证书) |
| -10006 | NDA_USER_CERT_SIGN_FAILED | 用户证书签名失败(鉴权第二步,请求获取UserCode,使用用户证书签名失败) |
| -10007 | NDA_USER_CERT_NOT_EXIST_AM | 用户证书不存在(鉴权第三步,UserCode换取UserInfo,通过证书序列号查找证书) |
| -10008 | NDA_USER_CERT_TO_USERID_FAILED_AM | 用户证书解析userId失败(鉴权第三步,UserCode换取UserInfo,通过用户证书解析userId) |
| -10009 | NDA_VERIFY_SIGN_FAILED_AM | 签名验证失败(鉴权第三步,UserCode换取UserInfo,验证用户证书签名) |
| -10010 | NDA_FIND_USER_FAILED_AM | 查找用户失败(鉴权第三步,UserCode换取UserInfo,通过userId查找用户失败) |
| -10011 | NDA_DECODE_USER_CODE_FAILED_AM | 解析userCode失败(鉴权第三步,UserCode换取UserInfo,解析userCode失败) |
| -10012 | NDA_DECODE_USER_CERT_FAILED_AM | 解析用户证书失败(鉴权第三步,UserCode换取UserInfo,解析用户证书失败) |
| -10013 | NDA_DOMAIN_USER_NOT_EXISTED | 域用户不存在(鉴权第二步,请求获取UserCode,判断域用户是否登录) |
| -10014 | NDA_MULTIPLE_LOGIN_USER | 解析用户证书失败(鉴权第二步,请求获取UserCode,判断是否存在多个登录用户) |
| -10015 | NDA_COMPUTER_NOT_EXIST | 计算机不存在(鉴权第三步,UserCode换取UserInfo,查找计算机) |
| -10099 | NDA_FIND_USER_BY_USER_CODE_FAILED_AM | UserCode换取UserInfo失败,未知错误(鉴权第三步,UserCode换取UserInfo) |
| -20010 | UPSTREAM_TASKS_SYNCHRONIZING | 上游任务正在进行中 |
| -20020 | DOWNSTREAM_TASKS_SYNCHRONIZING | 下游任务正在进行中 |
| -20030 | OPERATION_TOO_FREQUENT | 操作太过频繁 |
| -20040 | SYNCHRONIZATION_TASK_IN_PROGRESS | 有同步任务正在进行中 |
| -30000 | ADMIN_APPROVAL_MATCHED | 操作需要审批,已经加入到审批记录表 |
| -30001 | ADMIN_APPROVAL_LOG_ERROR | 生成的审批记录有误 |
| -30002 | ADMIN_APPROVAL_LOG_NOT_EXISTED | 审批记录不存在 |
| -30003 | ADMIN_APPROVAL_LOG_STATE_ERROR | 审批记录的审批状态不对 |
| -30004 | ADMIN_APPROVAL_REPEAT | 重复审批审批对所有管理员生效,其他授权管理员已经审批过了 |
| -30005 | ADMIN_APPROVAL_NO_PERMISSION | 没有审批权限接口调用错误,这条审批记录不该自己审批 |
| -30006 | ADMIN_APPROVAL_ADD_ERROR | 审批新增操作,保存到数据库出现了异常 |
| -30007 | ADMIN_APPROVAL_UPDATE_ERROR | 审批更新操作,保存到数据库出现了异常 |
| -30008 | ADMIN_APPROVAL_DELETE_ERROR | 审批删除操作,保存到数据库出现了异常 |
| -10001 和 -5001 均存在一个码值对应多个业务语义的情况,使用方应结合接口业务域与 |
|---|
message 判断,不应仅按数值映射固定文案。
本附录概述各接口目录的业务用途,完整参数与示例以第 4 章为准。
完成用户身份认证、认证策略查询和动态密码发送。
查询 TACACS+ 认证日志、审计日志及用户登录会话。
同步、添加、更新、删除和查询用户信息。
管理用户终端绑定关系并申请临时用户。
查询用户与令牌绑定关系。
派发、绑定、解绑和查询手机令牌或时间型令牌。
查询站点列表并管理 MAC 地址黑白名单。
查询、新增、编辑和删除 MAC 列表集及其中的终端 MAC。
所有生产调用必须使用 HTTPS。
管理员密码、用户密码、共享密钥不得写入日志、错误信息或版本库。
Query 中传递密码可能进入代理日志和访问日志,应优先使用请求头或请求体传递敏感信息。
Basic Auth 仅是编码而非加密,必须与 TLS 配合使用。
调试示例应使用占位值,不得复用生产账号或真实个人信息。