统一身份认证OAUTH对接
统一身份认证OAUTH对接
引言
统一身份认证服务核心是CAS(Central Authentication Service)认证,当前CAS Server是基于开源框架CAS 6.3.1开发集成。支持CAS、SAML、OPENID、OAuth2.0等协议,支持JAVA、.NET、PHP等多个平台产品的CAS客户端对接,支持服务属性控制等。
编写目的
本文提供了CAS客户端使用OAUTH2.0对接步骤,并提供了JAVA版本客户端OAUTH认证实例。
准备工作
三方网站应用登录基于Cas协议标准构建的统一认证登录系统。在进行统一认证授权登录之前,需在平台中创建对应第三方应用(需准备待对接应用服务地址,例如:http://10.10.10.29:8080),并拥有该应用权限,并获得相应的client_id和client_secret,并获取统一认证平台地址(联系部署实施人员),可开始接入流程。
授权流程说明
统一认证OAuth授权登录让用户使用平台身份安全登录第三方应用或网站,在用户授权登录已接入平台OAuth的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行平台开放授权关系接口调用,从而可实现获取用户基本开放信息和帮助用户实现基础开放功能等。 统一认证OAuth授权登录目前支持authorization_code模式,适用于拥有server端的应用授权。该模式整体流程为:
- 第三方发起授权登录请求,用户允许授权第三方应用后,平台会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
- 通过code参数加上
client_id和client_secret等,通过API换取access_token;- 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
第一步:请求code
第三方使用网站应用授权登录前请注意固定参数是否正确(response_type=code),则可以通过在PC端打开以下链接: http://10.10.10.29:8088/oauth2.0/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI 若提示“该链接无法访问”,请检查参数是否填写错误,如redirect_uri的域名是否正确。
请求方式:GET
参数说明
| 参数名称 | 是否必须 | 参数说明 | 备注 |
|---|---|---|---|
| client_id | 是 | 接入系统id | 需服务端提供 |
| redirect_uri | 是 | 回调地址 | 需服务端授权 |
| response_type | 是 | 接入方式 | 固定值-code |
返回说明
用户允许授权后,将会重定向到redirect_uri的网址上,并且带上code参数
redirect_uri?code=CODE
若用户禁止授权,则不会发生重定向。
请求示例
登录某应用 https://test.lightcode.com/wechat/login.do 打开后,生成跳转地址,并重定向 http://10.10.10.29:8088/oauth2.0/authorize?response_type=code&client_id=123&redirect_uri=https%3A%2F%2Ftest.lightcode.com%2Fwechart%2Fcallback.do 用户使用确认登录后,PC端会跳转到 https://test.lightcode.com/wechart/callback.do?code=CODE。
第二部:通过code获取access_token
注意
注意:由于平台的client_secret和获取到的access_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。
通过code获取access_token
请求方式:POST
参数说明
| 参数名称 | 是否必须 | 参数说明 | 备注 |
|---|---|---|---|
| code | 是 | 获取code | 服务端返回 |
| client_secret | 是 | 系统秘钥 | 需服务端提供 |
| client_id | 是 | 接入系统id | 需服务端提供 |
| redirect_uri | 是 | 回调地址 | 需服务端授权 |
| scope | 是 | 使用范围 | 可选 |
| grant_type | 是 | authorization_code 授权码模式(即先登录获取code,再获取token)password 密码模式(将用户名,密码传过去,直接获取token)client_credentials 客户端模式(无用户,用户向客户端注册,然后客户端以自己的名义向'服务端'获取资源)implicit 简化模式(在redirect_uri 的Hash传递token; Auth客户端运行在浏览器中,如JS,Flash)refresh_token 刷新access_token | 建议使用authorization_code |
返回说明
正确的返回:
{
"access_token":"AT-1-BcyaLYfQEelhuSoU0m8IJd1wDRV9rGlK",
"expires_in":28800,
"scope":""
}参数说明
| 参数名称 | 参数说明 |
|---|---|
| access_token | 接口调用凭证 |
| expires_in | access_token接口调用凭证超时时间,单位(秒) |
| scope | 请求传入 |
第三步:根据access_token获取用户信息
通过access_token,构造获取身份信息链接请求
http://10.10.10.29:8088/oauth2.0/profile?access_token=AT-1-BcyaLYfQEelhuSoU0m8IJd1wDRV9rGlK
请求方式:POST
参数说明
| 参数名称 | 是否必须 | 参数说明 | 备注 |
|---|---|---|---|
| access_token | 是 | 网页授权接口调用凭证 |
