统一身份认证OAuth2
前置条件
在进行统一身份认证OAuth2.0授权登录接入前,在统一身份认证服务平台注册应用,并对该应用提请接入审核,当拥有一个已审核通过的应用,并获得相应的appid和appsecret后,申请统一认证登录且审核通过后,才可以开始接入流程。
授权说明
统一身份认证OAuth2.0授权登录让统一认证用户使用统一认证身份安全登录第三方应用,在统一认证用户授权登录已接入统一认证OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证access_token,通过access_token可以进行统一身份认证开放平台授权接口调用,从而可实现获取统一身份认证用户基本开放信息和帮助用户实现基础开放功能。
统一身份认证OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。模式整体流程步骤如下图所示:
图 access_toke操作流程图
图 access_token获取时序图
请求code
第三方使用网站应用授权登录前请注意已获取相应网页授权接口,可以在PC端打开以下链接:
http://ca.xxx.edu.cn/oauth/connect/appauth.do
?appid=APPID
&redirect_uri=REDIRECT_URI
&scope=SCOPE
&state=STATE
接口地址 |
|||
http://ca.xxx.edu.cn/oauth/connect/appauth.do |
|||
接口参数 |
是否必填 |
参数类型 |
参数说明 |
appid |
是 |
字符串 |
应用唯一标识 |
redirect_uri |
是 |
字符串 |
重定向地址,需要进行UrlEncode |
response_type |
是 |
字符串 |
填code |
scope |
是 |
字符串 |
网页应用目前仅填写web_login即可,用户注销或安全退出回到登录时填写web_logout |
state |
否 |
字符串 |
用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止CSRF攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为动态变化的随机数,并加上session进行校验 |
返回结果 |
若提示“该链接无法访问”,请检查参数是否填写正确,如redirect_uri的域名与应用申请审核时填写的授权域名是否一致或scope是否正确。 用户登录授权后,将会重定向到redirect_uri的网址上,并且带上code和state参数:redirect_uri?code=CODE&state=STATE |
示例说明:
登录双创大赛前台页面
http://alumnicy.nju.edu.cn/ndsc/front/login.do
打开后,应用中心会生成state参数,跳转到
http://ca.xxx.edu.cn/oauth/connect/appauth.do
?appid=gh76e77b800pd952be2c8237e200kld
&redirect_uri=http%3a%2f%2falumnicy.nju.edu.cn%2f ndsc%2ffront%2flogin.do
&scope=web_login
&state=929939DFKJS009238KMLPOD99823
用户确认登录后,PC端会跳转到
http://alumnicy.nju.edu.cn/ndsc/front/login.do
?code=8238283sk9090238kls8293sdf923
&state=929939DFKJS009238KMLPOD99823
通过code获access_token
通过code获取access_token
http://ca.xxx.edu.cn/oauth/api/accesstoken.do
?appid=APPID
&secret=SECRET
&code=CODE
&redirect_uri=http%3a%2f%2falumnicy.nju.edu.cn%2fndsc%2ffront%2flogin.do &grant_type=authorization_code
接口地址 |
|||
http://ca.xxx.edu.cn/oauth/auth/accesstoken.do |
|||
接口参数 |
是否必填 |
参数类型 |
参数说明 |
appid |
是 |
字符串 |
应用唯一标识 |
secret |
是 |
字符串 |
应用密钥appsecret |
code |
是 |
字符串 |
填写第一步获取的code参数 |
redirect_uri |
是 |
字符串 |
重定向地址,需要进行urlEncode |
grant_type |
是 |
字符串 |
填authorization_code |
return_type |
否 |
字符串 |
返回数据格式为json |
返回结果 |
|||
|
|||
返回参数 |
参数说明 |
||
access_token |
接口调用凭证 |
||
expires_time |
access_token接口调用凭证到期时间 |
||
openid |
授权用户唯一标识 |
||
refresh_token |
用户刷新access_token |
- 刷新access_token有效期
access_token是调用授权关系接口的调用凭证,由于access_token有效期(目前为1个小时)较短,当access_token超时后,可以使用refresh_token进行刷新,access_token刷新结果有两种:
1. 若access_token已超时,那么进行refresh_token会获取一个新的access_token,新的超时时间;
2. 若access_token未超时,那么进行refresh_token不会改变access_token,但超时时间会刷新,相当于续期access_token。
refresh_token拥有较长的有效期(10天),当refresh_token失效的后,需要用户重新授权。
请求方法:获取第一步的code后,请求以下链接进行refresh_token:
http://ca.xxx.edu.cn/oauth/auth/refreshtoken.do
?appid=APPID
&grant_type=refresh_token
&refresh_token=REFRESH_TOKEN
接口地址 |
|||
接口参数 |
是否必填 |
参数类型 |
参数说明 |
appid |
是 |
字符串 |
应用唯一标识 |
grant_type |
是 |
字符串 |
填refresh_token |
refresh_token |
是 |
字符串 |
填写通过access_token获取到的refresh_token参数 |
返回结果 |
|||
|
|||
返回参数 |
参数说明 |
||
access_token |
接口调用凭证 |
||
expires_time |
access_token接口调用凭证到期时间 |
||
openid |
授权用户唯一标识 |
||
refresh_token |
用户刷新access_token |
注意:
1、appsecret 是应用接口使用密钥,泄漏后将可能导致应用数据泄漏、应用的用户数据泄漏等高风险后果;存储在客户端,极有可能被恶意窃取(如反编译获取appsecret);
2、access_token 为用户授权第三方应用发起接口调用的凭证(相当于用户登录态),存储在客户端,可能出现恶意获取access_token 后导致的用户数据泄漏、用户相关接口功能被恶意发起等行为;
3、refresh_token 为用户授权第三方应用的长效凭证,仅用于刷新access_token,但泄漏后相当于access_token 泄漏,风险同上。
通过access_token调用接口
获取access_token后,进行接口调用,有以下前提:
1. access_token有效且未超时;
2. 应用中心已授权给第三方应用帐号相应接口
基础接口
接口名称 |
说明 |
/oauth/auth/accesstoken.do |
通过code换取access_token、refresh_token |
/oauth/auth/refreshtoken.do |
刷新或续期access_token使用 |
/oauth/auth/userinfo.do |
获取用户个人信息 |
返回码说明
返回码 |
错误码描述 |
说明 |
0000 |
success |
请求成功 |
1001 |
invalid appid or secret |
appid或者appsecret错误 |
1002 |
invalid grant_type |
授权代码错误 |
1003 |
invalid code |
用户临时票据无效 |
1004 |
invalid refresh_token |
无效的刷新令牌 |
1005 |
no authority |
无权限访问此接口 |
1006 |
refresh_token fail |
刷新令牌失败或已经超过10天 |
来源:oschina
链接:https://my.oschina.net/u/4406698/blog/4608577