OAuth2.0协议单点登录开发文档
# OAuth2.0协议单点登录开发文档
# 一、 OAuth2.0协议授权码模式交互流程
步骤说明:
- 用户通过浏览器访问资源应用。
- 应用判断当前未登录重定向至SSO,发起OAuth2.0授权发起接口(/authorize接口)。
- 浏览器收到请求后,转发OAuth2.0授权Request给SSO。
- 用户在SSO推送的登录页面中输入用户名和密码,SSO对用户提供的身份信息进行验证,并构建授权code的响应,重定向至资源应用的回调地址。
- 浏览器响应后转发OAuth2.0授权code给资源应用。
- 资源应用内部使用授权code调用SSO颁发token接口。
- SSO返回token给资源应用。
- 资源应用内部使用token调用SSO用户信息接口。
- SSO返回用户信息给资源应用。
# 二、 认证接口
# 1. 请求授权
# 1.1 接口描述
发起认证授权请求
# 1.2 请求路径
/api/sso/protocol/oauth2.0/authorize
# 1.3 HTTP请求方法
GET
# 1.4 请求参数
参数 | 参数类型 | 参数值 | 参数描述 |
---|---|---|---|
client_id | String | IDP分配给应用的客户端ID | |
response_type | 返回值类型,授权码模式为code,隐含模式为token | ||
redirect_uri | 应用回调地址 |
# 1.5 返回字段
302重定向
# 1.6 接口示例
调用参数:/api/sso/protocol/oauth2.0/authorize
成功返回:
//302重定向
http://app/demo/callback?code=OC-160-GoFhTmaYT2nfffHq6LtDPwnPFf5O4YBYPCb
2
失败返回
The client_id error.
# 2. 获取Token
# 2.1 接口描述
获取token
# 2.2 请求路径
api/sso/protocol/oauth2.0/token
# 2.3 HTTP请求方法
POST
# 2.4 请求参数
- 授权码模式:
grant_type=authorization_code&client_id=xxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxxxx&code=OC-1-xxxxxxxxxxxxxxx&redirect_uri=http://
[www.demo.com/callback](http://www.demo.com/callback)
2
- password模式:
grant_type=password&username=zhangsan&password=123456&client_id=xxxxxxxxxx
- 刷新Token模式:
grant_type=refresh_token&client_id=xxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxxxxxx&refresh_token=RT-10-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- 客户端模式:
grant_type=client_credentials&client_id=xxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxxxxxx
参数 | 参数类型 | 参数值 | 参数描述 |
---|---|---|---|
grant_type | String | 授权类型(authorization_code,client_credentials,refresh_token,password) | |
client_id | String | 客户端ID | |
client_secret | String | 客户端密钥 | |
code | String | 授权code | |
redirect_uri | String | 回调地址 | |
username | String | 用户名 | |
password | String | 密码 | |
refresh_token | String | 刷新Token |
# 2.5 返回字段
参数 | 参数类型 | 参数值 | 参数描述 |
---|---|---|---|
access_token | string | ||
token_type | string | ||
expires_in | number | ||
refresh_token | string | 刷新Token,需要Idaas配置应用时开启 |
# 2.6 接口示例
调用参数:/api/sso/protocol/oauth2.0/token
成功返回:
{
"access_token": "AT-1-C2ItLzlnrDsdUNwNYT3BMpoDqiNZfyVDtD5",
"token_type": "bearer",
"expires_in": 7200,
"refresh_token": "RT-1-9WOLkk6pU0auPBjoU5bcAxi3PqwDwpg1t7f"
}
2
3
4
5
6
失败返回:
- 授权码模式:
error=invalid_grant
- password模式:
{
"code": "IDS0161002",
"msg": "账号或密码错误,还剩3次机会,登录失败5次后账号将锁定30分钟"
}
2
3
4
- 刷新Token模式:
error=invalid_grant
- 客户端模式:
{
"timestamp": 1662636170951,
"status": 401,
"error": "Unauthorized",
"message": "",
"path": "/protocol/oidc/accessToken"
}
2
3
4
5
6
7
# 3 获取用户信息
# 3.1 接口描述
获取用户信息
# 3.2 请求路径
api/sso/protocol/oauth2.0/profile
# 3.3 HTTP请求方法
GET
# 3.4 请求参数
参数 | 参数类型 | 参数值 | 参数描述 |
---|---|---|---|
access_token | String | 获取token接口返回的access token |
# 3.5 返回字段
参数 | 参数类型 | 参数值 | 参数描述 |
---|---|---|---|
id | String | 用户名 | |
attributes | Object | 用户属性列表 |
# 3.6 接口示例
调用参数:/api/sso/protocol/oauth2.0/profile
成功返回:
{
"attributes": {
"phone": "18000000000",
"email": "zhangsan@paraview.cn",
"username": "zhangsan"
},
"id": "zhangsan",
"token_gtime": 1662635401987,
"token_expired": "1209600"
}
2
3
4
5
6
7
8
9
10
失败返回:
{
"error": [
"expired_accessToken"
]
}
2
3
4
5
# 三、应用配置演示
# 1. IDaaS平台应用配置
管理员账号登录IDaaS,进入【后台管理】-->【应用管理】-->【新增应用】-->【创建并添加应用】
【应用属性】标签的【应用地址】填写应用的地址,打开【启用】的开关,如果该应用需要二次认证,可以勾选【登陆应用二次认证】,点击【确认】,保存配置
【协议配置】标签,【认证模式】选择【OAUTH】,此时会自动生成基本信息,可以根据需求做出调整。client_id,client_secret会在步骤二中使用
【登录回调地址】需要跟应用平台确认,【登出回调地址】如果应用平台有对应的功能,可以配置,否则,可以随意配置
【认证属性】需要根据应用平台的要求做出选择,常用属性为【用户名】、【邮箱】、【手机号】,勾选需要的属性。属性名可以做映射,即应用属性名可以修改为应用平台的属性名,例如用户名在IDaaS的属性名为username,在应用平台为userName,那么可以在用户名对应的应用属性名一栏填入userName,完成映射。点击【确定】,保存配置
# 2. 应用平台配置
此步与应用平台息息相关,需要参考应用平台的配置说明。配置方法大相径庭,但主要目的一致:
- 配置client_id、client_secret
- 配置授权(authorize)、认证(token)、用户信息(profile)端点
# 3. 分配应用权限
【用户服务管理】-->【用户管理】,找到需要分配应用的用户,【查看详情】
【应用信息】标签,【添加应用】
勾选刚刚配置的应用,【确定】
# 4. 单点登录
登录分配了应用权限的账号,点击应用
跳转成功