判断是否需要绑定

  1. 任何获取用户数据的接口都能在用户对象中拿到参数need_bind,类型是tinyInteger,对应说明如下
数值 说明
1 需要绑定
9 无需绑定
  1. need_bind的值为9时无需操作,当值为1时需要走绑定流程。理论上如果用户需要绑定,应拒绝用户的一切业务操作,仅允许他走绑定流程。否则可能会造成绑定完成后已产生用户数据的丢失。

登录流程回顾

对于前端而言,IRS用户绑定与IRS用户登录采用同一套接口,仅在参数上存在一些区别。所以先回顾一下IRS登录流程。
也可以跳过回顾直接前往绑定流程部分。

  • IRS登录的大致流程:
    1. 用户需要先跳转至IRS单点登录地址 .
    2. 完成登录后跳转至网关接口 ,网关接口验证用户信息后生成用户 access_token。
    3. 跳转至前端业务页面
  • 所以IRS登录接口实际上是分别由IRS单点登录地址网关接口业务页面 三部分组成的。
  • IRS单点登录地址 是跳转的第一部分,是一个正常的地址
  • 网关接口 是跳转的第二部分,作为第一部分的`spappurl`参数跟在IRS单点登录地址 的`query`部分。
  • 业务页面 是跳转的第三部分,作为第二部分的`goto`参数跟在网关接口 的`query`部分。
  • 所以最终跳转地址的形式为https://esso.zjzwfw.gov.cn/opensso/spsaehandler/metaAlias/sp?spappurl=https://dea-api.idtshow.com:8443/ban/api/v1/login/irs?goto= + url_encode

绑定流程

  1. 获取当前url,并将其进行url编码
1
let url_encode = encodeURIComponent(location.href);
  1. 在url编码前拼接登录指定地址。
    • 测试服地址:https://esso.zjzwfw.gov.cn/opensso/spsaehandler/metaAlias/sp?spappurl=https://gdte-api.cloudvhall.com:8443/ban/api/v1/login/irs?goto=
    • 正式服地址:https://esso.zjzwfw.gov.cn/opensso/spsaehandler/metaAlias/sp?spappurl=https://dea-api.idtshow.com:8443/ban/api/v1/login/irs?goto=
1
2
3
4
5
// 正式服地址
// const ESSO_PREFIX = 'https://esso.zjzwfw.gov.cn/opensso/spsaehandler/metaAlias/sp?spappurl=https://dea-api.idtshow.com:8443/ban/api/v1/login/irs?goto=';
// 测试服地址
const ESSO_PREFIX = 'https://esso.zjzwfw.gov.cn/opensso/spsaehandler/metaAlias/sp?spappurl=https://gdte-api.cloudvhall.com:8443/ban/api/v1/login/irs?goto=';
let irs_url = ESSO_PREFIX + url_encode;
  1. 在登录地址后面拼接参数bind_user_id,值为用户对象中的id,使接口进行用户绑定操作。
1
let bind_user_url = irs_url + "&bind_user_id=" + userData.id
  1. 令浏览器跳转至拼接出来的单点登录地址。
1
location.href = bind_user_url;

测试账号

  • 公共测试账号:zjfrcszh
  • 公共密码:Zjfrcszh123

测试用快捷地址

  • 首先在浏览器中打开浙江口岸的登录页面完成登录

    • 账号testsso
    • 密码test1234
  • 访问下方地址一步完成浙江口岸用户认证为BAN用户的登录流程。

    1
    https://testsso.chinabeston.com:41/sso/oauth?appId=SWT00011&url=https://gdte-zlb.cloudvhall.com/findhall/