统一身份认证(地端)接入
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应用授权。该模式整体流程为:
- Web应用发起授权登录请求,用户允许授权Web应用后,统一认证会重定向到Web应用所提供的回调地址,并且带上授权临时票据code参数;
- 通过code参数等,通过调用相关接口,获取Access Token;
- 通过Access Token进行接口调用,获取用户基本信息或帮助用户实现开放功能操作。
第一步:请求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/token
或https://[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” | |
code | √ | code | 由第一步回调地址参数获得 |
返回结果:
{
"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_number | string | 学工号 | 发送消息使用 |
name | string | 姓名 | |
sex | string | 性别,boy - 男,girl - 女 | |
photo_live | string | 头像图片URL | |
identity | string | 身份,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/token
或https://[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_token | √ | Refresh 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>
参数名称 | 必填 | 说明 | 备注 |
---|---|---|---|
service | x | 注销后重定向地址 | 如果不填写此参数,则注销后会展示统一认证的一个结果页面。 |