CAS3.5.x(x>1)支持OAuth2 server
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html
内部邀请码:C8E245J (不写邀请码,没有现金送)
国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为“中国PE第一股”,市值超1000亿元。
------------------------------------------------------------------------------------------------------------------------------------------------------------------
原文地址: http://my.oschina.net/sayi/blog/200278
目录[-]
OAuth support
CAS3.5.x提供了oauth的支持,包括客户端和服务端,cas-server-support-oauth依赖架包
scribe-1.3.5.jar
scribe-up-1.2.0.jar
jackson-core-2.3.0.jar,jackson-databind-2.3.0.jar。
CAS默认提供了三个服务:
/oauth2.0/authorize
Input GET parameters required : client_id and redirect_uri.
/oauth2.0/accessToken
Input GET parameters required : client_id, redirect_uri, client_secret and code.
/oauth2.0/profile
Input GET parameter required : access_token.
关于接入的一些背景:
1.cas的web登录访问路径为https://cas.sayi.com:8443/cas/login
2.回调地址为http://www.doubannote.org/(虚拟地址,实际不存在)
3.client_Id为key
4.client_secret为secret
5.应用名称为DoubanNote
6.核心类为org.jasig.cas.support.oauth.web.OAuth20WrapperController
下面配置cas server支持oauth2 server,我们从oauth2 client向cas接入为步骤来分析每一步的配置:
step1. 应用配置,获得client_id和client_secret
在成熟的系统中,通常提供页面供用户申请应用,然后提供用户client_id和client_secret,并允许用户配置回调地址,那么oauthserver端(即CAS Server)首先考虑的就是需要持久化这些配置。默认在文件deployerConfigContext.xml的serviceRegistryDao中配置应用服务,实际使用中,我们可以将申请的应用信息存储在数据库中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<bean id= "serviceRegistryDao" class = "org.jasig.cas.services.InMemoryServiceRegistryDaoImpl" > <property name= "registeredServices" > <list> <bean class = "org.jasig.cas.services.RegisteredServiceImpl" > <property name= "id" value= "1" /> <property name= "name" value= "HTTP" /> <property name= "description" value= "oauth wrapper callback url" /> <property name= "serviceId" value= "${server.prefix}/oauth2.0/callbackAuthorize" /> </bean> <bean class = "org.jasig.cas.services.RegisteredServiceImpl" > <property name= "id" value= "2" /> <property name= "name" value= "key" /> <property name= "description" value= "secret" /> <property name= "serviceId" value= "http://www.doubannote.org/" /> <property name= "theme" value= "DoubanNote" /> </bean> ...... |
如代码所示,我们新注册了两个bean,关于应用的配置在第二个bean中,name为client_id,description为client_secret,serviceId为回调地址,theme为应用名称。
关于第一个bean的用途将在下面介绍。【终于搞明白了为何是这样了,服务器间接获取 ST】
step2. Oauth client 构造url,获取authorization_code
通常客户端构造的url可能如下(参数可以参照标准的oauth2 protocol,但是不同的oauth server通常提供了自己的标准):
1
|
https: //cas.sayi.com:8443/cas/oauth2.0/authorize?client_id=key&redirect_uri=http://www.doubannote.org/&response_type=code |
在这里就要求cas server能对/oauth2.0/authorize的url进行处理,那么就需要配置映射,在web.xml中配置如下:
1
2
3
4
|
<servlet-mapping> <servlet-name>cas</servlet-name> <url-pattern>/oauth2. 0 /*</url-pattern> </servlet-mapping> |
在cas-servlet.xml中配置映射:
1
2
3
4
5
6
7
|
<prop key= "/oauth2.0/*" >oauth20WrapperController</prop> ... ... <bean id= "oauth20WrapperController" class = "org.jasig.cas.support.oauth.web.OAuth20WrapperController" p:loginUrl= "${server.prefix}/login" p:servicesManager-ref= "servicesManager" p:ticketRegistry-ref= "ticketRegistry" p:timeout= "7200" /> |
如上配置了之后,我们获取授权码的链接会转向login页面,此时的service地址就是step1中配置的第一个bean的serviceId,通过这个默认提供的地址间接的获取到ST。
https: //cas.sayi.com:8443/cas/login?service=https%3A%2F%2Fcas.sayi.com%3A8443%2Fcas%2Foauth2.0%2FcallbackAuthorize |
认证成功之后,就会携带值为ST的参数跳转到callbackAuthorize页面,此时生成的ST即为授权码,回调地址、服务名称通过session传递过来。
https: //cas.sayi.com:8443/cas/oauth2.0/callbackAuthorize?ticket=ST-5-ywMLFaXQFnDeFI7erFy7-cas.sayi.com |
默认授权码只能使用一次,且有效时间为10s,可以通过票根过期策略进行配置时间。
step3. 授权码交换access_token
构造的URL如下:
1
2
3
|
https: //cas.sayi.com:8443/cas/oauth2.0/accessToken?client_id=key&client_secret=secret&grant_type=authorization_code&redirect_uri=http://www.doubannote.org/&code=ST-1-3jLuZnhcAvLiLdy7R6ft-cas.sayi.com access_token=TGT- 2 -qWkLyEbeoby043q05p5GHXfBg7qtdPZjEUhfemgg3UKbxAyB5s-cas.sayi.com&expires= 7143 |
通过返回的值可以获得access_token.
step4. 根据access_token获取用户信息
构造URL如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
https: //cas.sayi.com:8443/cas/oauth2.0/profile?access_token=TGT-1-gn3p9EMfFEajKOJ9DdNqd2PefJdIbIeXuESyzU4EctMtBqITRG-cas.sayi.com { "id" : "sayi" , "attributes" :[ { "uid" : "uid" }, { "eduPersonAffiliation" : "eduPersonAffiliation" }, { "groupMembership" : "groupMembership" } ] } |
总结
cas server支持oauth2 server,无非就是考虑对/authorize、/accessToken、/profile的请求的处理,在服务端进行应用配置后,对接入的应用进行校验,比如回调地址、client_secret等。在与cas server的融合中,主要就是cas认证与/authorize的融合。在这里使用的是callbackAuthorize的方式,cas默认提供了/oauth2.0/callbackAuthorize的service地址,通过此地址cas认证成功之后生成ST,此值即为授权码,传递给应用的回调地址即可。
总体来说oauth2的支持在cas3.5.x中并不完善,而且OAuth2的实现也不是标准的,对于3.5.x版本我们需要扩展OAuth20WrapperController来进一步融合oauth2 protocol。
CAS3.5.x(x>1)支持OAuth2 server的更多相关文章
- 使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server
原文转自 http://www.cnblogs.com/ldms/p/4565547.html Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后 ...
- 使用 OAuth2-Server-php 搭建 OAuth2 Server
Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后,发现了几个 OAuth2 的客户端扩展,但是并没有找到可以作为 OAuth2 Server 的 ...
- 功能齐全、效率一流的免费开源数据库导入导出工具(c#开发,支持SQL server、SQLite、ACCESS三种数据库),每月借此处理数据5G以上
软件名:DataPie 功能:支持SQL server.SQLite.ACCESS数据库的导入.导出.存储过程调用,支持EXCEL2007.EXCEL2003.ACCESS2007. CSV文件导入数 ...
- PHP Manager 安装失败的解决方法, PHP Manager 1.4 for IIS 10,经验证支持windows server 2016版本
// 另有无需进行修改注册表的安装包,经测试最高支持Windows Server 2016 版本,下载地址如下: https://github.com/EnhWeb/PHPManager/tree/m ...
- Linux + .net core 开发升讯威在线客服系统:同时支持 SQL Server 和 MySQL 的实现方法
前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程. 有很多朋友一直提出希望能够支持 MySQL 数据库,考虑到已经有朋友在用 SQL Server,我在升级的过程中 ...
- Linux 运行升讯威在线客服系统:同时支持 SQL Server 和 MySQL 的实现方法
前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程. 有很多朋友一直提出希望能够支持 MySQL 数据库,考虑到已经有朋友在用 SQL Server,我在升级的过程中 ...
- 低代码如何构建支持OAuth2.0的后端Web API
OAuth2.0 OAuth 是一个安全协议,用于保护全球范围内大量且不断增长的Web API.它用于连接不同的网站,还支持原生应用和移动应用于云服务之间的连接,同时它也是各个领域标准协议中的安全层. ...
- windows sever2003安装Wamp 2.5不成功——VC 11不支持Windows Server 2003和win XP?
Windows Server 2003 安装Wamp 2.5不成功Wampserver 2.5 will not run on Windows XP 报错信息:C:\wamp\bin\apache\a ...
- 使用ms owin 搭建oauth2 server
http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server 有示例代码 关于token的 ...
随机推荐
- 使用 redis 减少 秒杀库存 超卖思路
由于数据库查询的及插入的操作 耗费的实际时间要耗费比redis 要多, 导致 多人查询时库存有,但是实际插入数据库时却超卖 redis 会有效的减少相关的延时,对于并发量相对较少的 可以一用 publ ...
- set -o vi AIX下shell
set -o vi 再用esc+K键就可以使用上一条指令了 esc+kesc+j上下翻 ksh默认是emacs风格的.set -o emacs 在AIX下使用自己已经使用过的命令 在AIX下使用,默认 ...
- HDU 3746 Cyclic Nacklace(KMP找循环节)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 题目大意:给你一个字符串,求出将字符串的最少出现两次循环节需要添加的字符数. 解题思路: 这题需 ...
- POJ 3279 Fliptile(DFS+反转)
题目链接:http://poj.org/problem?id=3279 题目大意:有一个n*m的格子,每个格子都有黑白两面(0表示白色,1表示黑色).我们需要把所有的格子都反转成黑色,每反转一个格子, ...
- 小技巧:tar命令打包目录时,排除文件和目录的命令
今天不巧要用上,百度. tar zcvf fd.tar.gz pardir --exclude=pardir/file1 --exclude=pardir/dir1
- BFS迷宫搜索路径
#include<graphics.h> #include<stdlib.h> #include<conio.h> #include<time.h> # ...
- java 可变参数讲解
java5中新增了可变参数,这个可变参数和C语言中的用法是差不多,但实现起来却不一样. 下面我们一起来看看吧. 其实可变参数就是一个数组 class A{ public void func(int.. ...
- (17) go 协程管道
一.协程 二.管道
- mysql协议简析
前言 如果要在命令行中连接mysql,最常用的便是 mysql -u root -p 这样指定用户名和密码 当然还可以使用远程连接 mysql -h 127.0.0.1 -u root -p 还有一种 ...
- 深入浅出Spring(二) IoC详解
上次的博客深入浅出Spring(一)Spring概述中,我给大家简单介绍了一下Spring相关概念.重点是这么一句:Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面 ...