统一身份认证(地端)接入

优质
小牛编辑
129浏览
2023-12-01

CAS接入

CAS即Central Authentication Service(中央认证服务),是一种独立开放的指令协议,由耶鲁大学发起,旨在为Web应用系统提供一种可靠的单点登录方法。微哨统一认证产品(以下简称:统一认证)基于官方开源的最新版本CAS Server进行二次开发,提供了对CAS协议(v1、v2、v3)的完备支持。

统一认证CAS接入地址:https://[basehost]/cas,其中basehost为客户所指定的统一认证平台的域名。

采用CAS协议接入的Web应用可参考CAS - CAS Clients,选择相应语言的Client SDK进行集成接入。在集成之前,请联系管理员,在统一认证管理平台进行服务注册,才能成功接入。

OAuth 2.0(Authorization Code模式)接入

OAuth 2.0是一个工业界标准的授权协议,目前被各大互联网厂商所广泛使用。统一认证基于CAS Server,提供对OAuth 2.0协议的支持,使得通过CAS协议和OAuth 2.0协议接入的应用都能使用统一的认证中心进行单点登录。

在进行统一认证的OAuth 2.0授权登录接入之前,请联系管理员,在统一认证管理平台进行服务注册,并获得相应的Client ID和Client Secret,即可开始接入流程。

授权流程说明

OAuth 2.0授权登录让用户能够使用由统一认证提供的账号密码安全、单点登录各种接入统一认证的Web应用。在用户授权登录后,Web应用可以获取到用户的调用凭证(Access Token),通过凭证进行相关的接口调用,获取用户基础信息或进行其他统一认证开放功能的使用等。

OAuth 2.0授权登录目前支持Authorization Code模式,适用于拥有服务器端的Web应用授权。该模式整体流程为:

  1. Web应用发起授权登录请求,用户允许授权Web应用后,统一认证会重定向到Web应用所提供的回调地址,并且带上授权临时票据code参数;
  2. 通过code参数等,通过调用相关接口,获取Access Token;
  3. 通过Access Token进行接口调用,获取用户基本信息或帮助用户实现开放功能操作。

OAuth授权流程

第一步:请求code(HTTP GET)

使用Web应用授权登录前请注意已获取相应网页授权作用域(scope=base_api)。获取code需要向如下地址发送GET请求: https://[basehost]/cas/oauth2.0/authorize?client_id=<CLIENT_ID>&redirect_uri=<CALLBACK_URI>&response_type=code&scope=base_api&state=<STATE>

参数名称必填说明备注
client_id:开发者使用api唯一标识统一认证提供的Client ID
redirect_uri:回调地址此步骤需要urlencode,用来接收本接口返回的code参数等
response_type:固定值为“code”
scope:作用域与注册时匹配
state:

如果没有登录,会转到统一认证登录页面。登录后,redirect_uri填写的回调地址会收到来自于统一认证的GET请求,并附带如下参数:

code=<CODE>&state=<STATE>

如果已经登录,则会直接跳转回调地址。

参数名称说明
code请求access_token需要的code
state

访问级别:普通接口

频次限制:暂无

授权scope:base_api

第二步:根据code获取Access Token(HTTP POST)

接入的Web应用应在获取到code之后,向如下地址发送POST请求: https://[basehost]/cas/oauth2.0/tokenhttps://[basehost]/cas/oauth2.0/accessToken

Content-Type:

application/x-www-form-urlencoded

请求参数:


grant_type=authorization_code&client_id=<CLIENT_ID>
&client_secret=<CLIENT_SECRET>&code=<CODE>&redirect_uri=<CALLBACK_URI>
参数名称必填说明备注
client_id开发者使用api唯一标识统一认证提供的Client ID
client_secret开发者使用api凭据统一认证提供的Client Secret
redirect_uri回调地址与获取code时填写的回调地址相同
grant_type固定值为“authorization_code”
codecode由第一步回调地址参数获得

返回结果:

{
    "access_token":"fDanz0ydkCqVsgSoze7mrCnwJIsN0dL",
    "expires_in":"1209600",
    "scope":"base_api",
    "refresh_token":"HhbiRKzjVnKdvGfmuGjvh3Clm4AIMqV8",
    "token_type":"Bearer"
}

错误返回:

{
    "errcode":40029,
    "errmsg":"invalid code"
}
参数名称说明备注
errcode错误编码
errmsg错误提示

访问级别:普通接口

频次限制:暂无

授权scope:base_api

第三步:获取用户信息(HTTP GET)

接口地址: https://[basehost]/cas/oauth2.0/profile?access_token=<ACCESS_TOKEN>

参数名称必填说明备注
access_token第二步获取的access_token

返回结果:

 {
    "name": "张三",
    "student_number": "zhangsan",
    "sex": "boy",
    "photo_live": "http://store.weishao.com.cn///group1/M00/00/00/rBGoWlawRX6IbazWAALtCN376l4AAAAHA5mBBMAAu0g965.jpg",
    "identity": "teacher"
}
参数名称类型说明备注
student_numberstring学工号发送消息使用
namestring姓名
sexstring性别,boy - 男,girl - 女
photo_livestring头像图片URL
identitystring身份,teacher - 教职工,student - 学生

错误返回:

{
    "code":401/403/500,
    "data":"Unauthorized",
    "errno":"100401"//内部错误代码
}
参数名称说明备注
errcode错误编码
errmsg错误提示

访问级别:普通接口

频次限制:暂无

授权scope:base_api

Access Token过期换取新Token(HTTP POST)

要换取新的Access Token,可向如下地址发送POST请求: https://[basehost]/cas/oauth2.0/tokenhttps://[basehost]/cas/oauth2.0/accessToken

Content-Type:

application/x-www-form-urlencoded

请求参数:


grant_type=refresh_token&client_id=<CLIENT_ID>
&client_secret=<CLIENT_SECRET>&refresh_token=<REFRESH_TOKEN>
参数名称必填说明备注
client_id开发者使用api唯一标识统一认证提供的Client ID
client_secret开发者使用api凭据统一认证提供的Client Secret
grant_type固定值为“refresh_token”
refresh_tokenRefresh token第二步获取的refresh_token

返回结果:

{
    "access_token": "xN2836yQAQfDURxVPds0IM9vfUk3IJC5",
    "expires_in": 604800,
    "scope": "base_api",
    "refresh_token": "VFlAp82EUWNQJkokRvoELSPhPpO3pSPS",
    "token_type": "Bearer"
}

注销登录

注销登录会清除用户在统一认证的登录状态,任何接入的应用再次使用都需要重新输入账号密码。要注销登录,需要在Web应用的前端页面向如下地址发送GET请求: https://[basehost]/cas/logout?service=<CALLBACK_URI>

参数名称必填说明备注
servicex注销后重定向地址如果不填写此参数,则注销后会展示统一认证的一个结果页面。