当您创建了微信投票活动,希望能够在微信中投票的同时也能在自己的APP中投票时就可以使用此功能,也可以通过设置让投票只能在您的APP中进行,也就是说通过SSO统一登录投票功能可以使投票采用您的自有系统的用户身份来计票。
磐石平台的SSO单点登录投票功能允许您使用自有系统平台(下文称为第三方系统)来验证用户身份并投票。要使用SSO登录身份投票功能先按照此文档开发相关接口,然后进入管理中心 > 投票SSO接口设置 ,配置相关接口和参数。
SSO登录远程验证投票者身份的原理是当用用户打开投票页时,磐石平台会主动通过“远程登录URL”向第三方系统发起登录请求,第三方系统完成用户登录等身份识别操作后将用户的唯一ID传回磐石平台用于计票。
1、用户打开一个已开启“SSO单点登录投票”功能的微信投票网页。
2、投票页会自动转到第三方系统的“远程登录URL”并传递相关参数给此URL(下文表1、示例1)。
3、第三方的系统接收到一个远程登录验证的请求,获取附带的相关参数并进行校验与保存。
4、第三方系统的通过本地的验证方式使该用户登录并取得用户在本地的唯一ID。
5、第三方系统将用户的唯一ID和其他参数相结合生成一个签名token。
6、第三方系统跳转到回调URL并向该URL传递该用户的唯一ID、token、时间戳以及最初投票页传递的相关参数(下文表2、示例2)。
7、磐石平台获取到这个回传的请求然后使用同样方式验证请求的合法性,同时还会通过“后台验证接口URL”再次向第三系统发起验证用户合法性的后台请求,如果验证成功则跳转到投票页并允许该用户投票(下文表3、示例3)。
参数名称 | 是否必须 | 类型 | 描述 |
---|---|---|---|
guid | 是 | string | 投票页参数,原样传回 |
guidtype | 是 | string | 投票页参数,原样传回 |
timestamp | 是 | string | 当前时间戳(秒级别) |
token | 否 | string | MD5加密(guid+guidtype+timestamp+通信密钥) |
callbackurl | 否 | string | 回调URL,第三方系统完成用户登录后跳转到此URL并传递相关参数 |
示例1:
假设远程登录URL为:http://www.abcdefg.net/login2stonepoll.php
则磐石平台将会携带参数跳转到该链接地址:
http://www.abcdefg.net/login2stonepoll.php?guid=154149aa-9073-e7db-c3d9-9dd1d9f9101a&guidtype=vote&&token=46bee85bcbbd9fcdb05254e13cfce0f3×tamp=1571385620&callbackurl=http://wx4ce119add9c73a3d.wx.mvote.cn/action/votessocallback.html
参数名称 | 是否必须 | 类型 | 描述 |
---|---|---|---|
guid | 是 | string | 投票页参数,磐石平台发起登录请求时传递过来的参数 |
guidtype | 是 | string | 投票页参数,磐石平台发起登录请求时传递过来的参数 |
timestamp | 是 | string | 当前时间戳(秒级别) |
useropenid | 是 | string | 第三方系统的用户唯一ID |
paramstoken | 是 | string | MD5加密(guid+useropenid+timestamp+通信密钥) |
示例2:
示例1中跳转到第三方系统时携带参数中的"callbackurl"即为回调URL,那么第三方系统完成用户登录后就需要携带相关参数跳转到callbackurl,例如:
http://wx4ce119add9c73a3d.wx.mvote.cn/action/votessocallback.html?guid=154149aa-9073-e7db-c3d9-9dd1d9f9101a&guidtype=vote&useropenid=1111111111×tamp=1571386175¶mstoken=1f0bcfa2d2a66241d7ce8e2e9b5fc792
“远程登录URL”逻辑代码示例
参数名称 | 是否必须 | 类型 | 描述 |
---|---|---|---|
guid | 是 | string | 投票活动ID |
useropenid | 是 | string | 第三方系统的用户唯一ID |
timestamp | 是 | string | 当前时间戳(秒级别) |
paramstoken | 是 | string | MD5加密(guid+useropenid+timestamp+通信密钥) |
示例3:
假设“后台验证接口URL”为:http://www.abcdefg.net/checkuser.php
则磐石平台在后台发起GET请求:
GET http://www.abcdefg.net/checkuser.php?guid=154149aa-9073-e7db-c3d9-9dd1d9f9101a&useropenid=11111212121212×tamp=1571385620¶mstoken=1f0bcfa2d2a66241d7ce8e2e9b5fc792
“后台验证接口URL”在收到验证请求后,按如下流程进行处理:
1、先对参数进行校验,就是在本地根据参数生成一个md5值,然后与接口传递过来的“paramstoken”进行对比,如果一致则表示合法请求。
2、在本地系统检查“useropenid”是否为合法有效的用户ID,如果是有效的用户则直接打印“OK”,否则就打印错误信息,此错误信息会显示给用户。
“后台验证接口URL”逻辑代码示例:
关于“特定UserAgent”的使用
任何浏览器在访问网页时都会有一个UserAgent,嵌入在APP中的网页浏览器也有此参数,例如使用Google浏览器访问网页时,它的Useragent中就会有“Chrome”类似的字样,如果您的APP在嵌入网页浏览器时没有自定义Useragent就不能使用此功能。
例如苹果版微信的Useragent是如下内容:
其中用红线标出的(MicroMessenger)就是微信特有的Useragent,其他的内容都不是特定内容,在其他的APP中也可能会出现。
QQ的UserAgent是如下内容:
其中用红线标出的(QQ)就是QQ特有的Useragent。
通过对比可以看出除了红线标出的内容,其他内容几乎是相同的。
如果您的APP在嵌入浏览器时没有自定Useragent,就不要使用“启用-特定APP模式”。
开启SSO登录投票
编辑投票进入“发布设置”,找到“SSO单点登录投票”的设置,选择合适的方式进行开启就可以了,如下图: