资讯动态

如何用 cURL 与 HMAC-SHA256 签名调用 JumpServer 账号密码查询 API?

发布时间:2026/9/10 5:32:01 来源:尧图企业网站定制
如何用 cURL 与 HMAC-SHA256 签名调用 JumpServer 账号密码查询 API【免费下载链接】jumpserverJumpServer is an open-source Privileged Access Management (PAM) platform that provides DevOps and IT teams with on-demand and secure access to SSH, RDP, Kubernetes, Database and RemoteApp endpoints through a web browser.项目地址: https://gitcode.com/GitHub_Trending/ju/jumpserver你的目标很明确不登录 JumpServer 网页界面通过 cURL 调用 PAM 的账号密码查询接口用资产名和账号名换回该账号的密码secret。JumpServer 为这个场景提供了 RESTful 查询接口和一套基于 HTTP SignatureHMAC-SHA256的认证方式官方在 demo.sh 和 使用说明 中给出了完整的 cURL 示例。适用环境要求来自官方文档BashcURLOpenSSLbase64准备获取 API Key 与组织 ID根据文档 FAQ 的说明在 PAM 的“应用管理”中创建应用即可生成KEY_ID和KEY_SECRET后续签名就靠这一对凭据。此外你还需要ORG_ID请求所属组织的 ID。demo 脚本中默认值为00000000-0000-0000-0000-000000000002调用时要换成你自己所在组织的 IDAPI_URLJumpServer 服务的访问地址。demo 脚本中默认为http://127.0.0.1:8080换成你的实际部署地址查询参数asset资产名称与account账号名称两者都是必填。demo 脚本里出现的72b0b0aa-ad82-4182-a631-ae4865e8ae0e这类 KEY_ID、KEY_SECRET 属于示例值不是可用凭据请替换为你自己应用生成的值。接口与签名结构请求方式GET api/v1/accounts/integration-applications/account-secret/请求参数参数名类型必填说明assetstr是资产名称accountstr是账号名称签名的生成过程与 demo.sh 一致生成 GMT 格式的时间戳作为Date请求头DATE$(date -u %a, %d %b %Y %H:%M:%S GMT)组装(request-target)注意必须包含查询参数QUERY_STRINGasset${ASSET}account${ACCOUNT} REQUEST_TARGETget /api/v1/accounts/integration-applications/account-secret/?${QUERY_STRING}拼接待签名串固定包含四行(request-target)、accept、date、x-jms-orgSIGNING_STRING(request-target): $REQUEST_TARGET accept: application/json date: $DATE x-jms-org: $ORG_ID用 KEY_SECRET 计算 HMAC-SHA256再转成 base64SIGNATURE$(echo -n $SIGNING_STRING | openssl dgst -sha256 -hmac $KEY_SECRET -binary | base64)完整调用脚本下面是基于 demo.sh 整理的完整脚本。ASSET与ACCOUNT是你要查询的对象demo 中示例为ubuntu_docker/root凭据与组织 ID 请替换为自己的值demo 中给出了默认示例值可用环境变量覆盖。#!/bin/bash # Configuration parameters API_URL${API_URL:-http://127.0.0.1:8080} KEY_ID${API_KEY_ID:-72b0b0aa-ad82-4182-a631-ae4865e8ae0e} KEY_SECRET${API_KEY_SECRET:-6fuSO7P1m4cj8SSlgaYdblOjNAmnxDVD7tr8} ORG_ID${ORG_ID:-00000000-0000-0000-0000-000000000002} # Query parameters ASSETubuntu_docker ACCOUNTroot QUERY_STRINGasset${ASSET}account${ACCOUNT} # Calculate the timestamp DATE$(date -u %a, %d %b %Y %H:%M:%S GMT) # (request-target) must include the query parameters REQUEST_TARGETget /api/v1/accounts/integration-applications/account-secret/?${QUERY_STRING} # Generate the signing string SIGNING_STRING(request-target): $REQUEST_TARGET accept: application/json date: $DATE x-jms-org: $ORG_ID # Calculate the HMAC-SHA256 signature SIGNATURE$(echo -n $SIGNING_STRING | openssl dgst -sha256 -hmac $KEY_SECRET -binary | base64) # Send the request curl -G $API_URL/api/v1/accounts/integration-applications/account-secret/ \ -H Accept: application/json \ -H Date: $DATE \ -H X-JMS-ORG: $ORG_ID \ -H X-Source: jms-pam \ -H Authorization: Signature keyId\$KEY_ID\,algorithm\hmac-sha256\,headers\(request-target) accept date x-jms-org\,signature\$SIGNATURE\ \ --data-urlencode asset$ASSET \ --data-urlencode account$ACCOUNT几个请求头的作用Accept: application/json与Date参与签名必须与签名串中的值一致X-JMS-ORG指定组织同样参与签名X-Source: jms-pam服务端签名认证会校验该头值必须为jms-pamAuthorization携带keyId、算法hmac-sha256、参与签名的头列表与signature服务端据此完成验签。结果验证请求成功时接口返回 JSON文档给出的示例响应如下示例结果实际 id 与 secret 以你的环境为准{ id: 72b0b0aa-ad82-4182-a631-ae4865e8ae0e, secret: 123456 }拿到 JSON 且secret有值说明查询成功。有两点需要留意每次成功查询服务端都会记录一条IntegrationApplicationLog含来源 IP、应用、资产与账号这是接口本身的行为可在审计中查到服务端存在SECURITY_DISABLE_VIEW_SECRET配置若该配置生效返回的secret会是null而不是密码本身——这是服务端配置决定的不是签名错误。排查与限制调用失败时结合返回信息对照以下情况查不到账号接口对不存在的资产/账号组合返回错误提示 “Account not found”Not found。此时先确认asset是资产名称、account是账号名称且二者在你的组织内真实存在。返回Invalid signature.签名不通过。常见原因是Date头与签名串中的值不一致时间戳漂移、(request-target)中漏写了查询参数或 KEY_ID / KEY_SECRET 不匹配。服务端对各类签名失败统一返回该提示不会区分具体原因。返回Ip is not in access ip list.应用配置了 IP 访问限制而你的请求 IP 不在允许列表内。需要把调用方 IP 加入该应用的 IP 组或调整应用的 IP 限制。KEY_ID 对应的应用无效不存在或已停用时同样会得到Invalid signature.不会单独提示 key 无效。签名认证要求keyid、algorithm、signature字段齐全且(request-target)、date是必验头少传任意一项都会认证失败。参考cURL 示例脚本demo.sh接口使用说明README.zh-hans.md同接口的其他语言实现可参考apps/accounts/demos/下的python、java、go、node示例目录服务端接口实现见 application.py。【免费下载链接】jumpserverJumpServer is an open-source Privileged Access Management (PAM) platform that provides DevOps and IT teams with on-demand and secure access to SSH, RDP, Kubernetes, Database and RemoteApp endpoints through a web browser.项目地址: https://gitcode.com/GitHub_Trending/ju/jumpserver创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价