鉴权与 Origin 校验

开放平台有三种凭证。最终用户不需要全民简历账号。

凭证持有方用途有效期
开发者登录 Cookie开发者控制台管理应用、查看及充值账户余额7 天
appSecret接入方后端解析简历、生成 PDF、获取模板、创建编辑会话重置或删除应用前
editorTokeniframe 内部草稿、AI 和导出24 小时

appSecret 只能放后端

Authorization: Bearer {appSecret}

不能把 appSecret 写进网页、App、小程序、iframe URL 或 Git 仓库。父页面应请求自己的后端,由后端创建会话并只返回 editorUrl

Origin 为什么要校验两次

  1. 创建会话时:API 校验 parentOrigin 是否存在于该应用的 allowOrigins 中。
  2. 发送消息时:iframe 使用精确的 parentOrigin 作为 postMessage 的 targetOrigin,不使用 *
  3. 接收消息时:父页面再次校验消息确实来自 https://www.qmjianli.com,并校验 event.source 是当前 iframe。

应用配置

允许嵌入域名:
https://hr.example.com
https://test.example.com
http://localhost:3000

Origin 只包含协议、域名和可选端口,不包含路径。下面两个不是同一个 Origin:

https://hr.example.com
http://hr.example.com

创建会话

{
  "parentOrigin": "https://hr.example.com",
  "resumeData": {}
}

没传返回 PARENT_ORIGIN_REQUIRED;不在白名单返回 ORIGIN_NOT_ALLOWED

父页面接收

var iframe = document.getElementById("qm-resume-editor");
window.addEventListener("message", function (event) {
  if (event.origin !== "https://www.qmjianli.com") return;
  if (event.source !== iframe.contentWindow) return;
  if (!event.data || event.data.source !== "QM_RESUME_EDITOR") return;
  // 这里再处理 event.data.event
});

统一返回格式

成功:

{ "code": 1, "status": "success", "data": {}, "message": "ok" }

失败:

{
  "code": 2,
  "status": "error",
  "error": "ORIGIN_NOT_ALLOWED",
  "data": "父页面域名未加入应用允许域名"
}
全民简历开放平台 · 与个人简历账号完全独立