帮助中心 账户 登录方式 单点登录(SSO)子账户接口

单点登录(SSO)子账户接口

接口介绍

使用该接口,可以通过单点登录(SSO)的方式创建子账户,创建成功之后可以通过此接口登录子账户。

使用此接口创建的用户,属于主账户下属的子账户,权益同主账户同步。除创建和登录方式不同外,其他权益、设置同手动创建的子账户完全一致。


接入前准备

1. 使用主账户登录 SurveyMars,在 「我的账户」 页面查看 appId(账户 ID)。


2. 联系客服为您开通并下发 Secret Key(密钥)。该密钥仅用于在服务端计算签名 sign,切勿拼入 URL 明文传输或暴露在前端代码中。


我的账户


3. 确认您的系统能在服务端生成符合规范的 SHA256 签名字符串,并能在用户浏览器或可信任环境中发起 GET 请求打开登录链接。


接口参数说明


请求方式:GET


接口链接:https://surveymars.com/app/login/sso/verify?appId=&email=&userName=&roleId=&ts=&returnUrl=&language=&isOnlyLogin=&sign=



参数名 参数说明 是否必须
appId 公司 ID。主账号登录后在 「我的账户」 页面查看,页面中的账户 ID 即为接入所需的 appId。Query 中参数名须为 appId(大小写与文档保持一致)。
Secret Key 开发密钥,需联系客服生成,生成后可在 「我的账户」 页面查看;仅用于在服务端计算 sign
ts 时间戳,从 1970-01-01 00:00:00(UTC)起至当前的 秒数有效期为 60 秒
sign 加密签名。sign 为对拼接后的明文字符串做 SHA256 得到的十六进制小写字符串,作为查询参数 sign。请求中带 roleId 时,明文为 appId + email + userName + roleId + ts + Secret Key;未传 roleId(非必填省略)时,明文须不含 roleId 段,为 appId + email + userName + ts + Secret Key。拼接顺序与类型须严格一致;Secret Key 只参与服务端拼接,不出现在浏览器地址栏。详见下文「签名计算规则」。
补充:查询参数 isOnlyLoginlanguagereturnUrl 相同,不参与上述签名字符串拼接。当 isOnlyLogin=true 且请求中不传 userName 时,计算 signuserName 段按空字符串参与拼接(顺序不变:仍为 appId + email +(此处 userName 为空)+ roleId(若传)+ ts + Secret Key)。
如需在线计算 SHA256 以核对拼接是否正确,可将得到的明文字符串粘贴到第三方工具(例如 LZL 在线 SHA256 哈希)中生成。正式环境仍建议在服务端代码中生成 sign,勿将 Secret Key 暴露给浏览器。
email 创建子账户绑定的邮箱,请使用 绝对唯一 的字段;不可为空。
userName 创建子账户的用户名(显示名),长度不超过 150 个字符;不可为空。若含空格、中文或特殊字符,须对参数值做 URL 编码(如空格使用 %20)。
补充:isOnlyLogin=true 时,userName 为非必填(仅登录、不创建子账号,详见 isOnlyLogin)。当 isOnlyLogin=false 或未传 isOnlyLogin(默认按 false 处理)时,userName 必填。
条件必填
isOnlyLogin 是否仅登录已有子账号、不创建子账号。取值 true / false(建议小写);不传时默认 false该参数不参与 sign 的 SHA256 拼接
true:仅校验并登录该 email 下已存在的子账号,不会创建新子账号;userName 非必填。若子账号不存在,系统将提示用户不存在(具体文案随界面语言变化)。
false 或未传:userName 必填;若该邮箱对应子账号已存在则直接登录,不存在则创建子账号并登录(创建时仍适用 roleId 等既有规则)。
roleId 创建子账户的角色,可选;不传或留空时默认为「问卷管理员」。子账户角色:1-系统管理员,2-问卷管理员,3-统计结果查看员,4-完整结果查看员,6-问卷编辑协作员。请勿传入未列出的数字,否则返回错误信息。
returnUrl 指定登录成功后的跳转地址(建议使用相对路径,如 /usercenter/survey/list)。不传时默认跳转到「我的问卷」页面;建议对路径做 URL 编码,移动端等场景亦应能正确落地。
language 界面语言,传入整数。可选;不传时使用系统默认语言。该参数不参与上文 sign 的 SHA256 拼接计算。
取值对照:
1—简体中文(zh)
2—英语(en)
3—繁体中文(tw)
4—日语(ja)
5—韩语(ko)
6—阿拉伯语(ar)
7—法语(fr)
8—德语(de)
9—西班牙语(es)
10—葡萄牙语(pt)
11—意大利语(it)
12—俄语(ru)
13—泰语(th)
14—土耳其语(tr)
15—印尼语(id)
16—越南语(vi)
17—波兰语(pl)
18—荷兰语(nl)
22—希伯来语(he)
23—瑞典语(sv)
27—丹麦语(da)
28—芬兰语(fi)
30—马来语(ms)
31—挪威语(nb)
50—冰岛语(is)


签名计算规则


1. 将参与签名的字段按固定顺序直接首尾拼接为一条字符串(中间无分隔符)。当请求中传递了非必填参数 roleId 时,顺序为:appId + email + userName + roleId + ts + Secret Key。当 roleId 未传(留空或不带该参数)时,签名字符串中须完全省略 roleId 这一段,顺序为:appId + email + userName + ts + Secret Key,不可用占位数字或空字符串代替 roleId补充:isOnlyLogin=true 且 URL 中不传 userName 时,上述 userName 位置按空字符串拼接后再计算 signisOnlyLogin 本身不参与拼接。


2. 对该字符串做 SHA256,取十六进制小写字符串作为参数 sign 的值。


3. 查询参数中的 languagereturnUrlisOnlyLogin 等若存在,均不参与上述签名字符串拼接;仅按第 1 步所列字段顺序计算。



首次创建与再次登录


emailroleIduserName 仅在子账户 首次创建 时写入系统。若该 email 对应子账户已存在,后续登录请求 不会 校验本次传入的 roleIduserName 是否与历史一致,也 不会 用新传入值修改已有资料;若签名或必填参数有误,仍可能返回验签失败或参数错误。


补充(isOnlyLogin 与登录 / 创建):isOnlyLogin=false 或未传时:若 email 已有子账号则登录,若无则创建子账号并登录(userName 等在首次创建时写入)。当 isOnlyLogin=true 时:仅允许登录已有子账号,不创建;子账号不存在时提示用户不存在


常见问题

问:为什么提示验签失败或参数错误?


答:请核对 Secret Key 是否正确:若请求中带了 roleId,拼接顺序须为 appId、email、userName、roleId(整数)、ts、Secret Key;若未传 roleId,签名字符串中须省略 roleId 段,顺序为 appId、email、userName、ts、Secret Key。isOnlyLogin=true 且未传 userName 时,签名字符串中 userName 按空串拼接。同时确认 ts 仍在有效期内,且 URL 编码未改变用于拼接的原始值。缺少 appId 或邮箱为空会触发参数类错误;isOnlyLogin=false(或未传)时用户名为空也会触发参数类错误。


问:子账户已是问卷管理员,为何传入错误的 roleId 仍能登录?


答:当该 email 对应子账户已存在时,系统不会用本次请求的 roleIduserName 去校验或更新已有资料;这些字段主要影响首次创建。首次创建时仍须传入合法 roleId 或留空以使用默认角色。


问:ts 为何很快就过期?


答:生产环境要求时间戳与服务器时间相差在 60 秒 内,请在用户即将跳转前实时生成 tssign


问:userName 含空格或中文时接口异常怎么办?


答:请对查询参数做标准 URL 编码(空格编码为 %20 等)。未编码时部分 HTTP 客户端会截断或解析错误,表现为请求失败,并非服务端拒绝正常字符。


问:isOnlyLogin=true 与 false 有什么区别?提示用户不存在是什么原因?


答:isOnlyLogin=true 表示只登录、不创建子账号,userName 可不传;若该 email 在贵司主账号下尚无子账号,系统会提示用户不存在isOnlyLogin=false 或未传时,userName 必填;邮箱已有子账号则登录,没有则创建。


问:如何在 SurveyMars 侧删除 SSO 创建的子账户?


答:需主账户登录后,在 「子账号」 页面手动删除。贵司业务系统中删除员工不会自动删除 SurveyMars 子账户,请自行保持两边数据策略一致。


这篇文章有多大帮助?