OAuth2.0 隐式授权模式( Implicit)接入

隐式授权是为了兼顾到在浏览器中用诸如JavaScript的脚本语言实现的客户端而优化的简化授权代码流程。在隐式授权流程中,不是发给客户端一个授权码,而是直接发给客户端一个访问令牌,而且不会对客户端进行认证。隐式授权提高了一些客户端(比如基于浏览器实现的客户端)的响应能力和效率,因为它减少了获得访问令牌所需的往返次数。

授权码模式交互流程

浏览器浏览器业务系统/平台业务系统/平台统一身份认证平台统一身份认证平台判断本地是否有用户登录状态,无跳转到 “业务系统/平台” 的登录页面用户点击 “使用统一身份认证登录”,获取 OAuth2.0 隐式授权认证授权地址返回 OAuth2.0 隐式授权认证授权地址请求 https://cas_server_url/oauth2.0/authorize?response_type=token 附带 client_id、redirect_uri 参数验证客户端数据库,验证成功签发 access_token重定向 URL:redirect_uri#token=access_token ,例如:https://my_server_url/callback#token=access_token解析请求地址的 Fragment,查找 access_token,有调用用户认证信息接口:https://cas_server_url/oauth2.0/profile,获取用户认证信息返回用户认证信息认证信息匹配本地账号失败,则使用认证信息创建账号如果用户认证信息不满足要求,可调用用户详情接口获取用户详情,作为本地用户详情数据调用用户详情信息接口:https://api_server_url/user/info,获取用户详情返回用户详情信息“业务系统/平台” 本地账号、用户信息建立关联,OAuth2.0 隐式授权模式接入完成!重定向到 “业务系统/平台” 的默认界面

第一步:获取 access_token

前端 JavaScript 获取 access_token :https://cas_server_url/oauth2.0/authorize?response_type=token&client_id=yourclient&redirect_uri=https://my_server_url/callback

参数列表如下:

参数名称 参数说明 请求类型 是否必须 数据类型 schema
client_id 应用审核通过后返回的client_id query true string
response_type 返回类型,填写为token query true string
redirect_uri 回调地址,应用接入第二步中填写的首页地址 query true string

用户授权后,浏览器重定向redirect_uri指定的网址,并带上令牌,注意,这个跳转地址后面带参数必须是#。

https://my_server_url/callback#token=${access_token}

开发者可在回调地址的接口上实现access_token的解析:

URI uri = new UR("https://my_server_url/callback#token=access_token");
System.out.println(uri.getFragment());

第二步:获取到 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-10-23 18:38
最后编辑:Jeebiz  更新时间:2024-05-07 20:29