微信小程序认证
准备工作
在测试或对接之前,应用需做以下几点准备工作:
1、确认微信小程序支持标准的OAuth授权码模式支持
流程简介:
- 获取code。
- code换token。
- token换用户信息。
2、网络检查
检查网络是否互通(如DNS),不通则找学校业务负责人。
3、应用信息收集
对接前请先参考《应用信息收集表》统计应用信息,发送给负责的老师或锐捷技术人员,申请对应用进行单点授权配置,授权完成后方可进行对接测试;
4、应用注册授权(SourceID管理员操作)
(1)应用在SID中注册后,SID将根据填写信息生成应用ID、应用秘钥(若有必要,可向锐捷研发人员索要)。应用注册步骤为:
1、新增对接应用。

2、填写应用基础信息。

(2)单点登录对接配置-进入配置。

(3)配置OAuth2单点登录对接相关信息。

注:
- 回调地址采用地址匹配模式,可匹配该地址的子集地址。
- 目前的登出类型为前端登出(FRONT_CHANNEL)。即使用href引用登出地址的方式登出,登出后浏览器跳转到统一认证页面。
- 记录下应用ID、应用秘钥,以便应用请求SID认证接口。
(4)启用配置。

微信小程序对接
一、获取加密秘钥
- 获取accessToken
- 设置请求头 Authorization: Bearer {access_token}

获取加密密钥接口
请求⽅式: GET(HTTPS或HTTP)
请求地址: http://self.xxx.com/linkid/api/encrypt/get/public/key
注:https方式类似。
请求参数: 无
参数说明: 无
返回结果:
示例:
{
"code":200,
"message":"OK",
"data": {
"key":"123453456"
}
}
参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
| code | int | int |
| state | String | 返回状态消息 |
| data | 自定义对象 | 返回值的自定义对象,即加密密钥 注:加密密钥具体使用规则见获取code接口中state参数说明 |
二、微信小程序获取code接口
微信小程序获取code接口
请求⽅式: GET(HTTPS或HTTP)
请求地址: https://sso.xxx.edu.cn/oauth2.0/authorize
注:https方式类似。
请求参数:
请求示例:
https://platform-dev.ruishan.cc/oauth2.0/authorize?response_type=code&client_id=sso&redirect_uri=http%3A%2F%2F127.0.0.1:12354%2Fsso&state=ssdsddswww
参数说明:
| 参数 | 是否必须 | 说明 |
|---|---|---|
| client_id | 是 | 应用唯一标识,即应用注册时获得的应用id |
| redirect_uri | 是 | 授权后重定向的回调链接地址,注意需使用 urlEncode 对链接进行处理 |
| response_type | 是 | 返回类型,请填写 code |
| scope | 否 | 作用域 |
| state | 是 | 请求授权码时需携带state参数,小程序通过将相关参数组装成JSON串格式后{"openid":"123456789", "unionid":"123456789", "userId":"123456789","from":"appId"} ,通过第一步获取的加密密钥,对JSON串进行AES加密,然后得到的加密串作为state参数传递 |
| openid | 是 | 用户微信的openid,openid与unionid只需传一个 |
| unionid | 是 | 用户微信的unionid,openid与unionid只需传一个 |
| userId | 否 | 多身份用户支持应用指定下发的用户身份信息 |
| from | 是 | 认证来源,默认为应用的appId,传递openid的时候需要传递from,from值为绑定微信时传递的fromSource参数 |
返回结果: ,在一系列校验后,会重定向到redirect_uri并且带着code和state
示例:
https://redirect_uri?code=xxxxx&state=xxx
参数说明:
| 参数 | 说明 |
|---|---|
| code | 下发的code |
| state | 请求code时带的参数 |
三、通过 code 换取网页授权token
请求⽅式: POST/GET(HTTPS或HTTP)
请求地址: https://sso.xxx.edu.cn/oauth2.0/accessToken
注:https方式类似。
请求参数:
注:请求数据类型为Form表单(application/x-www-form-urlencoded)或者url传参 注:使用get请求时,不用添加请求头
get示例:
grant_type=authorization_code&code=OC-9-iQBaj2rYndjtttJqJE9P6Qn-eoinZGnJ&redirect_uri=http://oauth.client.com.cn:9878&client_id=oauthTest&client_secret=9aggRf1kk0tSM28X-Fmo972aTkHt5hni2yXQH3IbBtx8cM-yGeSBItw6ASePAB0O
post示例,from表单:
grant_type:authorization_code
client_id:oauthTest
client_secret:9aggRf1kk0tSM28X-Fmo972aTkHt5hni2yXQH3IbBtx8cM-yGeSBItw6ASePAB0O
redirect_uri:http://oauth.client.com.cn:9878
code:OC-9-iQBaj2rYndjtttJqJE9P6Qn-eoinZGnJ
参数说明:
| 参数 | 是否必须 | 说明 |
|---|---|---|
| grant_type | 是 | 固定值 authorization_code |
| client_id | 是 | 应用唯一标识,即应用注册时获得的 应用id |
| client_secret | 是 | 应用的秘钥,即应用注册时获得的应用秘钥 |
| code | 是 | 授权码,即第一步应用回调地址获得的 code 参数值 |
| redirect_uri | 是 | 应用回调地址 |
返回结果:
{
"access_token": "fDanz0ydkCqVsgSoze7mrCnwJIsN0dL",
"expires_in": "1209600",
"scope": "base_api",
"refresh_token": "HhbiRKzjVnKdvGfmuGjvh3Clm4AIMqV8",
"token_type": "Bearer"
}
参数说明:
| 参数 | 说明 |
|---|---|
| access_token | 下发的token |
| expires_in | 有效期 |
| scope | 作用域 |
| refresh_token | 刷新令牌 |
| token_type | 令牌类型 |
四、获取用户信息
获取用户信息。
请求⽅式: GET/POST(HTTPS或HTTP)
请求地址: https://sso.xxx.edu.cn/oauth2.0/profile
注:https方式类似。
请求头:
Content-Type:from-data
注:使用get请求时,不用添加请求头
请求参数:
form表单post请求
示例:
access_token:AT-98-fDanz0ydkCqVsgSoze7mrCnwJIsN0dL
get请求
示例:
https://sso.xxx.edu.cn/oauth2.0/profile?access_token=AT-98-fDanz0ydkCqVsgSoze7mrCnwJIsN0dL
参数说明:
| 参数 | 是否必须 | 说明 |
|---|---|---|
| access_token | 是 | 令牌 |
返回结果:
{
"active": true,
"attributes": {
"DQZTM": "在任",
"DWH": "网络信息与综合服务中心",
"DWM": "306300",
"GH": "20042020",
"PRZWMC": "工程师",
"SFLBDM": "01",
"XBM": "男性",
"XM": "xxxx",
"SFLBMC": "xxxx"
},
"id": "20042020",
"clientId": "xxxxxx"
}
参数说明:
| 参数 | 说明 |
|---|---|
| id | 用户名 |
| clientId | 应用id |
| attributes | 用户属性列表 |
| XM | 姓名 |
| XBM | 性别 |
| SFLBDM | 身份类别代码 |
| PRZWMC | 职位名称 |
| GH | 工号 |
| DWM | 单位名 |
| DWH | 单位号 |
| DQZTM | 当前状态 |
| SFLBMC | 身份类别名称 |
| ZWJBMC | 职位级别名称 |