OAuth2.0 授权码模式(Authorization Code)接入

授权码模式(Authorization Code)适用于有前端(APP或网页)的应用,由统一身份认证平台,提供统一登录页面,完成认证后携带code跳转回“业务系统/平台”。

授权码模式交互流程

浏览器浏览器业务系统/平台业务系统/平台统一身份认证平台统一身份认证平台判断本地是否有用户登录状态,无跳转到 “业务系统/平台” 的登录页面获取到 OAuth2.0 认证授权地址请求 https://cas_server_url/oauth2.0/authorize?response_type=code 附带 client_id、redirect_uri 参数验证客户端数据库,验证成功重定向到统一身份认证平台登录界面POST 请求 https://cas_server_url/cas/login?service=xxx,附带 username、password、lt、execution、_eventId 参数验证用户数据库,验证成功生成并缓存 CODE重定向 URL:redirect_uri?code=CODE ,例如:https://cas_client_url/home?code=CODE查找 code 参数,有获取 access_token :https://cas_server_url/oauth2.0/accessToken?grant_type=authorization_code,附带 client_id,client_secret,code,redirect_uri 参数验证客户端数据库和CODE,验证成功签发 access_token查找请求响应中的 access_token,有调用用户认证信息接口:https://cas_server_url/oauth2.0/profile,获取用户认证信息返回用户认证信息认证信息匹配本地账号失败,则使用认证信息创建账号如果用户认证信息不满足要求,可调用用户详情接口获取用户详情,作为本地用户详情数据调用用户详情信息接口:https://api_server_url/user/info,获取用户详情返回用户详情信息“业务系统/平台” 本地账号、用户信息建立关联,OAuth2.0 授权码模式接入完成!重定向到 “业务系统/平台” 的默认界面

第一步:获取 临时授权码 code

访问 OAuth2.0 认证授权地址: https://cas_server_url/oauth2.0/authorize?response_type=code&client_id=yourclient&redirect_uri=https://my_server_url/callback

参数列表如下:

参数名称 参数说明 请求类型 是否必须 数据类型 schema
client_id 应用审核通过后返回的client_id query true string
response_type 返回类型,填写为code query true string
redirect_uri 回调地址,应用接入第二步中填写的请求地址 query true string
state 重定向后会带上state参数,该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验 query false string

重定向到 OAuth2.0 认证授权地址,从回调接口获取到临时授权码 code

response.sendRedirect("https://cas_server_url/oauth2.0/authorize?response_type=code&client_id=yourclient&redirect_uri=https://my_server_url/callback");

返回说明

用户授权成功后将会重定向到redirect_uri的网址上,并且带上code和state参数 redirect_uri?code=CODE&state=STATE

注意:跳转回调redirect_uri,应当使用https链接来确保授权code的安全性

第二步:授权码 code 获取 access_token

根据授权码 code 获取 access_token :https://cas_server_url/oauth2.0/accessToken?grant_type=authorization_code&client_id=yourclient&client_secret=yoursecret&code=yourcode&redirect_uri=https://my_server_url/callback

参数列表如下:

参数名称 参数说明 请求类型 是否必须 数据类型 schema
client_id 应用审核通过后返回的client_id body true string
client_secret 应用审核通过后返回的client_secret body true string
grant_type 授权类型常量 authorization_code body true string
code 临时授权码 body true string
redirect_uri 回调地址,应用接入第二步中填写的请求地址 body true string

返回示例

{
  "service" : "service_url",
  "attributes" : {
    "credentialType" : "LoginCredential"
  },
  "id" : "admin",
  "client_id" : "client"
}

第三步:获取到 access_token 后,可获取当前认证用户信息

根据 accesstoken 获取用户信息:https://cas_server_url/oauth2.0/profile?access_token=xxxxx

返回示例

{
  "service" : "service_url",
  "attributes" : {
    "credentialType" : "LoginCredential"
  },
  "id" : "admin",
  "client_id" : "client"
}

响应参数

参数名称 参数说明 类型 schema
service 应用地址 string
attributes 用户属性值 integer(int64)
id 用户唯一ID string
client_id 应用客户端ID string
作者:Jeebiz  创建时间:2022-08-20 18:07
最后编辑:Jeebiz  更新时间:2024-05-07 20:29