统一身份认证OAuth2

                                                                               统一身份认证OAuth2

前置条件

在进行统一身份认证OAuth2.0授权登录接入前,在统一身份认证服务平台注册应用,并对该应用提请接入审核,当拥有一个已审核通过的应用,并获得相应的appidappsecret后,申请统一认证登录且审核通过后,才可以开始接入流程。

授权说明

统一身份认证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的网址上,并且带上codestate参数:redirect_uri?code=CODE&state=STATE

示例说明:

登录双创大赛前台页面

http://www.xxx.edu.cn

打开后,应用中心会生成state参数,跳转到

http://ca.xxx.edu.cn/oauth/connect/appauth.do

?appid=gh76e77b800pd952be2c8237e200kld

&redirect_uri=http://ca.xxx.edu.cn/app/login.do?scope=web_login

&state=929939DFKJS009238KMLPOD99823

用户确认登录后,PC端会跳转到

http://ca.xxx.edu.cn?code=8238283sk9090238kls8293sdf923

&state=929939DFKJS009238KMLPOD99823

通过code获access_token

通过code获取access_token

http://www/xx.com.cn/app?appid=APPID

&secret=SECRET

&code=CODE

&redirect_uri=http://www.xx.com.cn/app/login.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

返回结果

正确的返回:
{
    "code": "0000",
    "data": {
        "access_token": "ACCESS_TOKEN",
        "expires_time": "2020-05-10 11:20:49",
        "openid": "OPENID",
        "refresh_token": "REFRESH_TOKEN"
    }
}
错误的返回:
{
"code":"1001",
"msg":"invalid appid or secret"
}

返回参数

参数说明

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

接口地址

 http://ca.xxx.edu.cn/oauth/auth/refreshtoken.do

接口参数

是否必填

参数类型

参数说明

appid

字符串

应用唯一标识

grant_type

字符串

refresh_token

refresh_token

字符串

填写通过access_token获取到的refresh_token参数

返回结果

正确的返回:
{
    "code": "0000",
    "data": {
        "access_token": "ACCESS_TOKEN",
        "expires_time": "2020-05-10 12:20:49",
        "openid": "OPENID",
        "refresh_token": "REFRESH_TOKEN"
    }
}
 
错误的返回:
{
"code":"1004",
"msg":"invalid refresh_token"
}

返回参数

参数说明

access_token

接口调用凭证

expires_time

access_token接口调用凭证到期时间

openid

授权用户唯一标识

refresh_token

用户刷新access_token

注意:

1appsecret 是应用接口使用密钥,泄漏后将可能导致应用数据泄漏、应用的用户数据泄漏等高风险后果;存储在客户端,极有可能被恶意窃取(如反编译获取appsecret);

2access_token 为用户授权第三方应用发起接口调用的凭证(相当于用户登录态),存储在客户端,可能出现恶意获取access_token 后导致的用户数据泄漏、用户相关接口功能被恶意发起等行为;

3refresh_token 为用户授权第三方应用的长效凭证,仅用于刷新access_token,但泄漏后相当于access_token 泄漏,风险同上。

通过access_token调用接口

获取access_token后,进行接口调用,有以下前提:

1. access_token有效且未超时;

2. 应用中心已授权给第三方应用帐号相应接口

基础接口

接口名称

说明

/oauth/auth/accesstoken.do

通过code换取access_tokenrefresh_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

### 统一认证平台概述 统一认证平台旨在提供一种集中式的安全机制,用于管理用户的身份验证和授权过程。这种平台能够确保不同应用程序和服务之间的无缝集成,同时提高系统的安全性并简化用户的访问流程。 #### 概念 统一认证指的是在一个多应用环境中建立单一入口来处理所有的身份验证请求。这意味着无论用户尝试访问哪个受保护的应用程序或服务,都只需经过一次完整的登录操作即可获得所需权限[^1]。这种方式不仅提升了用户体验,还增强了整个系统的安全性,因为管理员可以更有效地控制谁有权访问哪些资源。 #### 架构设计 微服务架构下的统一认证通常采用分布式部署模式,在此框架下,各个独立运行的服务实例可以通过API网关与中央认证服务器交互完成鉴权工作。具体来说: - **客户端**:发起针对特定资源的HTTP请求; - **API Gateway (网关)** :作为流量入口负责转发来自前端设备的消息到相应的后端处理器之前先检查是否有有效的令牌存在; - **Authorization Server (授权服务器)** :专门用来签发JWT(JSON Web Token)或者Session ID等形式的安全凭证给合法用户提供后续调用其他接口所需的证明材料; ```mermaid graph LR; A[Client] --> B(API Gateway); B --> C(Authorization Server); C --> D(Resource Servers); ``` #### 实现方案 对于实现层面而言,目前较为流行的两种技术分别是JWT(JSON Web Tokens)以及传统的Session会话跟踪方法。前者因其无状态特性而更适合现代云原生应用场景中的水平扩展需求;后者则依赖于服务器端存储维持用户在线状态的信息,适用于某些特殊场景如需频繁读取写入session数据的情况。 在实际构建过程中,还需要考虑诸如密码加密算法的选择、OAuth2.0协议的支持程度等因素以满足不同的业务逻辑和技术栈要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值