CAS3.5.2 Server 集成 OAuth2.0 Server 详细介绍

21 篇文章 1 订阅
16 篇文章 0 订阅

转载自 http://blog.yoodb.com/yoodb/article/detail/1226

        OAuth2.0是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储用户信息,而无需将用户名和密码提供给第三方应用,CAS3.5.x(x>1)提供了OAuth2.0的支持,包括客户端和服务端,依赖cas-server-support-oauth.jar包。


CAS默认提供了三个服务:

/oauth2.0/authorize

需要输入GET参数:client_id和redirect_uri

/oauth2.0/accessToken

需要输入GET参数:client_id,redirect_uri,client_secret和代码

/oauth2.0/profile

需要输入GET参数:access_token


关于CAS3.5.x Server版本接入oauth2.0 Server配置步骤,下面为本站素文宅www.yoodb.com大家分享一下个人总结,仅供大家参考学习使用。

1、将cas-server-support-oauth工程引入cas-server-webapp项目中,通过pom.xml文件,增加内容如下:

1
2
3
4
5
<dependency>
<groupId>org.jasig.cas< /groupId >
<artifactId>cas-server-support-oauth< /artifactId >
<version>${project.version}< /version >
< /dependency >


2、配置应用获得client_id和client_secret

在QQ、新浪等使用第三方登录中,通常提供页面供用户申请应用,然后提供用户client_id和client_secret,并允许用户配置回调地址,那么oauth2.0 server考虑的就是需要持久化这些配置,CAS默认在文件deployerConfigContext.xml的serviceRegistryDao中配置应用服务,注意实际使用可以将申请的应用信息存储在数据库中,具体配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<bean
id = "serviceRegistryDao"
         class= "org.jasig.cas.services.InMemoryServiceRegistryDaoImpl" >
             <property name= "registeredServices" >
                 <list>
                     <bean class= "org.jasig.cas.services.RegexRegisteredService" >
                         <property name= "id"  value= "0"  />
                         <property name= "name"  value= "HTTP and IMAP"  />
                         <property name= "description"  value= "Allows HTTP(S) and IMAP(S) protocols"  />
                         <property name= "serviceId"  value= "^(https?|imaps?)://.*"  />
                         <property name= "evaluationOrder"  value= "10000001"  />
<!-- 参数回传 -->
                         <property name= "ignoreAttributes"  value= "true" />
                     < /bean >
                     <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"  /><!-- 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.yoodb.com/"  />
                 <property name= "theme"  value= "Yoodb"  />
               < /bean >
                 < /list >
             < /property >
         < /bean >

如上述代码所示,新注册了两个bean,第一个bean不需要考虑那是默认存在的bean,如果想了解参考地址:bean http://www.yoodb.com/article/display/1223,我们新增的第二个bean中,name为client_id,description为client_secret,serviceId为回调地址,theme为应用名称,下面为大家说说第一个bean的用法及其用途。


3、 Oauth client构造url获得authorization_code(ST票据)

1)cas server对/oauth2.0/authorize的url进行拦截处理,需要配置映射,在web.xml中增加配置信息如下:

<servlet-mapping>

    <servlet-name>cas</servlet-name>

    <url-pattern>/oauth2.0/*</url-pattern>

</servlet-mapping>

2)在cas-servlet.xml配置文件,增加内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<bean
       id = "handlerMappingC"
       class= "org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" >
     <property name= "mappings" >
       <props>
...
...
<prop key= "/oauth2.0/*" >oauth20WrapperController< /prop >
...
...
<props>
< /bean >
<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地址就是第二步时新增的bean配置的第一个bean的serviceId,通过这个默认提供的地址间接的获取到ST票据,具体请求如下:

CAS Server在浏览器中打开地址:

1
http: //localhost :8080 /cas/oauth2 .0 /authorize ?client_id=key&redirect_uri=http: //www .yoodb.com/&response_type=codea

将会跳转到地址:

1
http: //localhost :8080 /cas/login ?service=http%3A%2F%2F127.0.0.1%3A8080%2Fcas%2Foauth2.0%2FcallbackAuthorize

,从而间接的获取到ST票据。认证成功之后,就会携带值为ST票据的参数跳转到callbackAuthorize页面,此时生成的ST即为授权码,其中回调地址、服务名称是通过session传递过来的,注意到浏览器地址变为如下:

1
http: //localhost :8080 /cas/oauth2 .0 /callbackAuthorize ?ticket=ST-5-u53bEqNQz2phBhnocFsb-www.yoodb.com

默认授权码只能使用一次且有效时间为10s,可以参考http://www.yoodb.com/article/display/1225文章,通过修改票据过期策略进行配置时间。


4、通过ST票据授权码获得access_token

在浏览器中输入如下地址:

1
2
http: //localhost :8080 /cas/oauth2 .0 /accessToken ?client_id=key&client_secret=secret&
grant_type=authorization_code&redirect_uri=http: //www .yoodb.com/&code=ST-3-KIxamZyWgOYFcoXggdfs-www.yoodb.com

返回access_token信息如下:

1
access_token=TGT-6-csg7B16Pc09aZ6bx9j3Y6INMzScyZFhZcOGEqpnBUvoiLJkv93-www.yoodb.com&expires=7193


5、根据access_token获取用户信息

在浏览器中输入如下地址:

1
http: //localhost :8080 /cas/oauth2 .0 /cas/oauth2 .0 /profile ?access_token=TGT-4-bxgrfir4tdCJ2O1EbR6eeguc3tcdpToZeyFBv416vdvvH1g3Nk-www.yoodb.com

根据access_token等到的返回用户信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
     "id" "000000000000000001" ,
     "attributes" : [
         {
             "uid" "000000000000000001"
         },
         {
             "username" "mrwang"
         },
         {
             "password" "123456"
         }
     ]
}

通过上述描述CAS3.5.x Server认证成功之后生成ST,此值即为授权码,传递给应用的回调地址即可,OAuth2的实现并不是很标准,对于CAS3.5.x Server版本需要扩展org.jasig.cas.support.oauth.web.OAuth20WrapperController类来进一步完善oauth2.0协议。

转载自 http://blog.yoodb.com/yoodb/article/detail/1226

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值