鉴权与 Origin 校验
开放平台有三种凭证。最终用户不需要全民简历账号。
| 凭证 | 持有方 | 用途 | 有效期 |
|---|---|---|---|
| 开发者登录 Cookie | 开发者控制台 | 管理应用、查看及充值账户余额 | 7 天 |
| appSecret | 接入方后端 | 解析简历、生成 PDF、获取模板、创建编辑会话 | 重置或删除应用前 |
| editorToken | iframe 内部 | 草稿、AI 和导出 | 24 小时 |
appSecret 只能放后端
Authorization: Bearer {appSecret}不能把 appSecret 写进网页、App、小程序、iframe URL 或 Git 仓库。父页面应请求自己的后端,由后端创建会话并只返回 editorUrl。
Origin 为什么要校验两次
- 创建会话时:API 校验
parentOrigin是否存在于该应用的allowOrigins中。 - 发送消息时:iframe 使用精确的
parentOrigin作为 postMessage 的targetOrigin,不使用*。 - 接收消息时:父页面再次校验消息确实来自
https://www.qmjianli.com,并校验event.source是当前 iframe。
应用配置
允许嵌入域名:
https://hr.example.com
https://test.example.com
http://localhost:3000Origin 只包含协议、域名和可选端口,不包含路径。下面两个不是同一个 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": "父页面域名未加入应用允许域名"
}