授权
准备工作
盯链授权登录是基于OAuth2.0 协议标准构建的 OAuth2.0 授权登录系统。 在进行 OAuth2.0 授权登录接入之前,在盯链平台注册开发者帐号,并拥有一个已审核通过的应用,并获得相应的 AppID 和 AppSecret,可开始接入流程。
授权流程说明
OAuth2.0 授权登录让用户使用 盯链APP 安全登录第三方应用或网站,在用户授权登录已接入 盯链APP OAuth2.0 的第三方应用后,第三方可以获取到用户的接口调用凭证access_token
,通过access_token
可以进行盯链开放平台授权关系接口调用,从而可实现获取 盯链 用户基本开放信息和帮助用户实现基础开放功能等。
盯链APP OAuth2.0 授权登录目前支持 authorization_code 模式,适用于拥有 server 端的应用授权。该模式整体流程为:
- 第三方应用发起钱包授权登录,根据授权请求参数跳转至 盯链APP 授权页面
- 盯链APP 用户允许授权第三方应用后,会重定向回到第三方网站,并且带上授权临时票据code参数
- 通过 code 获取 access_token
- 通过 access_token 进行接口调用,获取用户基本数据资源或帮助用户实现基本操作
获取 access_token 时序图:
第一步 获取 code
H5 网页授权
若为APP,请跳转浏览器并打开以下地址:
若为H5,请重定向至以下地址:
https://auth.h5.dinglian.biz/loading?appid=APPID&chain_id=CHAINID&scope=SCOPE&redirect_uri=REDIRECT_URI&type=oauth&state=STATE&phone_number=PHONE_NUMBER&restricted=RESTRICTED
以上地址中的参数需要平台完成拼接
参数说明
参数 | 必填 | 说明 |
---|---|---|
appid | 是 | 应用唯一标识(在盯链开放平台提交应用审核后获取) |
scope | 是 | 应用授权作用域,拥有多个作用域用逗号(,)分隔,详见授权 scope |
redirect_uri | 是 | 用于接收用户允许授权后返回的code参数的地址(会通过redirect_uri?code=xxxx&state=xxxx的参数拼接后重定向返回) |
type | 是 | 固定为 oauth |
chain_id | 否 | 区块链 ,用与授权登录时绑定钱包地址,枚举查看:支持链 |
state | 否 | 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止 csrf 攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加 session 进行校验 |
phone_number | 否 | 指定用户授权手机号,暂只支持11位中国大陆手机号码 |
restricted | 否 | 0 或不传:不限制,用户每次授权可选取不同的区块链地址 1: 限制用户区块链授权地址,用户在第一次授权完成后,后续 |
返回说明
当用户点击“允许”授权后,授权页面会通过传入的 redirect_uri 进行重定向请求
redirect_uri?code=CODE&state=STATE
第二步 通过 code 获取 access_token
请求
通过 code 获取 access_token:
https://api.dingstock.top/xserver/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE
参数说明
参数 | 必填 | 说明 |
---|---|---|
appid | 是 | 应用唯一标识 |
secret | 是 | 应用密钥 AppSecret |
code | 是 | 填写第一步获取的 code 参数 |
响应
{
"res": {
"access_token": "ACCESS_TOKEN",
"expires_in": 7200,
"refresh_token": "REFRESH_TOKEN",
"openid": "OPENID",
"scope": "SCOPE"
},
"code": 200
}
参数说明
参数 | 必填 | 说明 |
---|---|---|
access_token | 是 | 接口调用凭证 |
expires_in | 是 | access_token 接口调用凭证超时时间,单位(秒) |
refresh_token | 是 | 用户刷新 access_token |
openid | 是 | 授权用户唯一标识 |
scope | 是 | 用户授权的作用域,使用逗号(,)分隔,详见授权 scope |
错误返回样例:
{
"msg": "invalid scope",
"code": 500 // 错误码
}
第三步 通过 access_token 获取用户信息
获取 access_token 后,进行接口调用,有以下前提:
- access_token 有效且未超时;
- 用户已授权给第三方应用帐号相应作用域(scope)。
此接口用于获取用户个人信息。开发者可通过 openid 来获取用户基本信息。
请求 GET
https://api.dingstock.top/xserver/oauth2/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&scope=SCOPE
参数说明
参数 | 必填 | 说明 |
---|---|---|
access_token | 是 | 获取 access_token中得到的 access_token |
openid | 是 | 获取 access_token中得到的 openid |
scope | 否 | 用户授权的作用域,使用逗号(,)分隔,不传则返回 access_token 中对应的全部作用域 |
响应
响应的数据由用户对第三方应用授权时的 scope 参数和请求参数中的 scope 决定,scope 作用域详见授权 scope。
其中,contact
对应用户手机号信息敏感字段,返回结果会进行 AES 加密,AES 密钥为 appsecret 在盯链开放平台中获取。
{
"res": {
// scope含baseInfo时返回
"baseInfo": {
"openid": "OPENID",
"walletAddress": "0x111111111111111111",
"chainId": "conflux",
"nickName": "昵称",
"authLevel": 0
},
// scope含contact时返回
"contact": {
"phoneNumber": "AES(手机号)" // 通过 appsecret 解密
}
},
"code": 200
}
刷新 access_token
access_token 是调用授权关系接口的调用凭证,由于 access_token 有效期(目前为 2 个小时)较短,当 access_token 超时后,可以使用 refresh_token 进行刷新。
refresh_token 有效期
refresh_token 拥有较长的有效期(30 天),当 refresh_token 失效的后,需要用户重新授权。
请求
请求以下链接进行 refresh_token:
https://api.dingstock.top/xserver/oauth2/refresh_token?appid=APPID&refresh_token=REFRESH_TOKEN
参数说明
参数 | 必填 | 说明 |
---|---|---|
appid | 是 | 应用唯一标识 |
refresh_token | 是 | 获取 access_token中得到的 refresh_token |
响应
{
"access_token": "ACCESS_TOKEN",
"expires_in": 7200,
"refresh_token": "REFRESH_TOKEN",
"openid": "OPENID",
"scope": "SCOPE"
}
响应参数及错误情况同上
注意:
1、appsecret 是应用接口使用密钥,泄漏后将可能导致应用数据泄漏、应用的用户数据泄漏等高风险后果;存储在客户端,极有可能被恶意窃取(如反编译获取 Appsecret)
2、access_token 为用户授权第三方应用发起接口调用的凭证(相当于用户登录态),存储在客户端,可能出现恶意获取 access_token 后导致的用户数据泄漏、相关接口功能被恶意发起等行为;
3、refresh_token 为用户授权第三方应用的长效凭证,仅用于刷新 access_token,但泄漏后相当于 access_token 泄漏,风险同上。
建议将 secret、用户数据(如 access_token)放在 App 云端服务器,由云端中转接口调用请求。
授权 Scope
baseInfo
参数 | 类型 | 说明 |
---|---|---|
openid | string | 授权用户唯一标识 |
nickName | string | 用户昵称 |
avatarUrl | string | 用户头像 url,可能为空字符串 |
walletAddress | string | 用户授权的区块链地址 |
chainId | string | 区块链 id,可选值 |
authLevel | int | 用户是否实名, 0 未实名,1 已实名 |
支持链
conflux
接入样式
账号授权
盯链流程如下图所示:
钱包授权
盯链流程如下图所示:
接入方样式建议
平台方可以使用盯链提供的 openid 进行登录
但如果平台方强要求用户必须绑定手机号码时,授权成功后建议增加一步绑定手机号的操作,如下图: