CAS3.5.x(x>1)支持OAuth2 server

原文地址: 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。

?


1

https://cas.sayi.com:8443/cas/login?service=https%3A%2F%2Fcas.sayi.com%3A8443%2Fcas%2Foauth2.0%2FcallbackAuthorize

认证成功之后,就会携带值为ST的参数跳转到callbackAuthorize页面,此时生成的ST即为授权码,回调地址、服务名称通过session传递过来。

?


1

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。

时间: 2025-01-15 11:31:49

CAS3.5.x(x>1)支持OAuth2 server的相关文章

使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server

Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后,发现了几个 OAuth2 的客户端扩展,但是并没有找到可以作为 OAuth2 Server 的扩展.因为 Yii 是组织良好的易于扩展的框架,所以完全可以集成其它的 PHP OAuth2 Server 实现方案.在 OAuth.net/2/ 官网上,提供了几个 PHP 实现的 OAuth2 Server.这里使用第一个 OAuth2-Server-php 来作为 Yii 框架的 OAuth2

使用 OAuth2-Server-php 搭建 OAuth2 Server

Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后,发现了几个 OAuth2 的客户端扩展,但是并没有找到可以作为 OAuth2 Server 的扩展.因为 Yii 是组织良好的易于扩展的框架,所以完全可以集成其它的 PHP OAuth2 Server 实现方案.在 OAuth.net/2/ 官网上,提供了几个 PHP 实现的 OAuth2 Server.这里使用第一个 OAuth2-Server-php 来作为 Yii 框架的 OAuth2

功能齐全、效率一流的免费开源数据库导入导出工具(c#开发,支持SQL server、SQLite、ACCESS三种数据库),每月借此处理数据5G以上

软件名:DataPie 功能:支持SQL server.SQLite.ACCESS数据库的导入.导出.存储过程调用,支持EXCEL2007.EXCEL2003.ACCESS2007. CSV文件导入数据库,支持EXCEL.CSV.ZIP.ACCESS文件方式导出,支持数据拆分导出及自定义SQL查询与导出. 开发背景:作者从事财务管理工作,主要是出具集团的内部财务报表,随着公司精细化管理的需求,管理报表的数据量急速增长, 依赖EXCEL加工处理数据已经变得极为困难,因此团队全面转向关系数据库进行数

面对即将终止支持的server你还能做些什么

截止到7月14日终止支持日期,WindowsServer 2003仅仅剩下两次定期性更新,以后将不再有不论什么安全更新.这就意味着,若您在7月15日起依旧使用Windows Server 2003的话.当此server发现不论什么新漏洞,您将马上面临危急. 依据近期的一项调查显示,82%的受訪者其企业内部仍有一些Windows Server 2003 存在.而这些受訪者其中的25%表示,将在缺乏支持和维护的情况下继续使用Windows Server 2003. 使用缺乏支持的操作系统,在营运上被

使用ms owin 搭建oauth2 server

http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server 有示例代码 关于token的加密解密 server 端 app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions { 其中AccessTokenFormat可以设置身份的序列化和加密方式,遗憾的是不能用简单的json或xml,因为有循环引用 是一个实

(原创)linux下Microsoft/cpprestsdk支持https(server)

原创,转载请标明源地址 之前看网上一堆的资料说Microsoft/cpprestsdk不支持https或者说只支持window下的https,差点就被误导了,没办法,只好自己去翻了下源代码 先说明下linux版本把,centos7 创建ssl证书啥的,网上一堆的资料,这边就不再说了,直接贴源代码了 #include <stdio.h>#include <cpprest/uri.h>#include <cpprest/http_listener.h>#include &l

SQLSERVER 免费对比数据库结构和数据的工具支持:SQL Server 2012, SQL Server 2008 and SQL Server 2005

New xSQL Schema Compare - version 5 Compare the schemas of two SQL Server databases, review differences, generate synchronization script and execute it - xSQL Schema Compare makes database change management easy. xSQL Schema Compare supports SQL Serv

microkms神龙版_v18.10.06-去弹窗/升级/广告--支持WIN SERVER 2019激活

这里我在和大家推荐2款不错的激活工具 1.装机员激活工具很纯净 https://www.go176.net/post-3035.html 挺不错的,给人感觉非常纯净  ,缺点是部分W10系统不支持 2.Re-Loader Activator一键激活Windows系统和office软件 https://www.go176.net/post-4090.html 如果大家怕麻烦用这个就可以了 提示:360会误报,介意者勿下!!!修改内容:1.去除更新提示.2.去除弹窗广告3.去除更新链接4.去除广告按

Azure 支持SQL Server 2019备份和文件还原

Blog Address:https://blog.51cto.com/14669127 Microsoft 继续推动 SQL Server 2019的可用性.性能和数据智能的边界,所以对于企业确保所有数据的备份解决方案是至关重要的. 今天跟大家分享如何在Azure VM上的SQL Server 2019 做数据备份,这是19年发布的针对在Azure 的VM上运行 SQL Server 的一个重要补充. Azure 备份是一个零基础架构的解决方案,它可以保护Azure VM中的独立SQL Ser