# 17. CAS
# 17. CAS
shiro-cas 模块是用来保护一个 [Jasig CAS](http://www.jasig.org/cas) 单点登录服务器。它使一个 Shiro-enabled 程序变成 CAS 客户端
## Basic understanding of the CAS protocol CAS协议的基本理解
1. 如果你想访问一个应用程序由 CAS 保护,并且如果你不验证在这个应用程序中的客户端,你重定向通过 CAS 客户端 到 CAS 服务器登录页面。 在 CAS 登录 url 定义了应用程序用户希望登录服务参数。
<http://application.examples.com/protected/index.jsp> → HTTP 302 → <https://server.cas.com/login?service=http://application.examples.com/shiro-cas>
2. 你填写的登录名和密码和验证CAS服务器,然后将用户重定向到应用程序(服务的 url)和 url 的服务票证。 服务票证是短暂的一次性令牌可赎回在CAS服务器用户标识符(和可选地,用户属性)。
<https://server.cas.com/login?service=http://application.examples.com/shiro-cas> → HTTP 302 → <http://application.examples.com/shiro-cas?ticket=ST-4545454542121-cas>
3. 应用程序直接问 CAS 服务器如果服务票是有效和 CAS 服务器响应通过身份验证的用户的身份。 一般来说,CAS 端转发用户最初叫保护页面。
<http://application.examples.com/shiro-cas?ticket=ST-4545454542121-cas> → HTTP 302 → <http://application.examples.com/protected/index.jsp>
## How to configure shiro to work with CAS server ? 配置
### Dependency 依赖
```
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-cas</artifactId>
<version>version</version>
</dependency>
```
( 版本 > = 1.2.0)。
### CasFilter
你必须定义服务应用程序的 ur l(在 CAS 服务器也必须声明)。 该url将被用来接收 CAS 服务票证。 例如: <http://application.examples.com/shiro-cas>
在 shiro 配置,您必须定义 CasFilter :
```
[main]
casFilter = org.apache.shiro.cas.CasFilter
casFilter.failureUrl = /error.jsp
```
(失败的 url 时,服务票验证失败)。
和url可用:
```
[urls]
/shiro-cas = casFilter
```
这样,当用户通过 CAS服务器使用有效的服务票证(身份验证)后, 被重定向到应用程序服务 url (/shiro-cas),这个过滤器接收服务票证,并创建一个 CasToken 可以被 CasRealm 使用。
### CasRealm
CasRealm 使用 CasFilter 创建的 CasToken 通过 CAS 对CAS服务器服务票证 查验,从而对用户进行身份验证
在shiro配置,您必须添加 CasRealm :
```
[main]
casRealm = org.apache.shiro.cas.CasRealm
casRealm.defaultRoles = ROLE_USER
#casRealm.defaultPermissions
#casRealm.roleAttributeNames
#casRealm.permissionAttributeNames
#casRealm.validationProtocol = SAML
casRealm.casServerUrlPrefix = https://server.cas.com/
casRealm.casService = http://application.examples.com/shiro-cas
```
casServerUrlPrefix 是 CAS 服务器的 url(例如: [https://server.cas.com](https://server.cas.com/) )。
casService 是应用程序服务 url,url 指向应用程序收到 CAS 服务票证(例如: <http://application.examples.com/shiro-cas> )。
validationProcol可以是 SAML或 CAS(默认):属性 和 remember me信息 只推到 SAML 验证协议(具体定制除外)。 这取决于 CAS 服务器的版本:SAML 协议可以使用 CAS 服务器版本 >= 3.1。
*如果选择 SAML 验证,需要添加更多依赖*
```
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>org.opensaml</groupId>
<artifactId>opensaml</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.apache.santuario</groupId>
<artifactId>xmlsec</artifactId>
<version>1.4.3</version>
</dependency>
```
defaultRoles 是默认的角色给了 CAS 认证成功后通过身份验证的用户。
defaultPermissions 是默认的权限给了 CAS 认证成功后通过身份验证的用户。
roleAttributeNames 定义属性的名称来自 CAS 响应定义角色给了身份验证的用户(角色由 comas 进行分隔 )。
permissionAttributeNames 定义属性的名称来自 CAS 响应它定义权限给身份验证的用户(权限由 comas 进行分隔 )。
### CasSubjectFactory
在 CAS 服务器,你可以“记住我”的支持。 这些信息是通过 SAML 验证或CAS 定制的验证。 反映在 Shiro CAS-remember 我地位,你必须定义一个特定的 CasSubjectFactory 在你的Shiro配置:
```
[main]
casSubjectFactory = org.apache.shiro.cas.CasSubjectFactory
securityManager.subjectFactory = $casSubjectFactory
```
### Security of the application应用程序的安全
最后,您必须定义您的应用程序的安全。
在 Shiro 配置,您必须保护 url 与角色(例如):
```
[urls]
/protected/** = roles[ROLE_USER]
/** = anon
```
和登录 url 如果用户没有经过身份验证的 CAS 服务器上定义与应用程序服务网址:
```
[main]
roles.loginUrl = https://server.cas.com/login?service=http://application.examples.com/shiro-cas
```
这样,如果你不验证和尝试访问 /保护/ url,您被重定向到CAS服务器进行身份验证。
### Complete configuration sample 完整的配置样例
```
[main]
casFilter = org.apache.shiro.cas.CasFilter
casFilter.failureUrl = /error.jsp
casRealm = org.apache.shiro.cas.CasRealm
casRealm.defaultRoles = ROLE_USER
casRealm.casServerUrlPrefix = https://server.cas.com/
casRealm.casService = http://application.examples.com/shiro-cas
casSubjectFactory = org.apache.shiro.cas.CasSubjectFactory
securityManager.subjectFactory = $casSubjectFactory
roles.loginUrl = https://server.cas.com/login?service=http://application.examples.com/shiro-cas
[urls]
/shiro-cas = casFilter
/protected/** = roles[ROLE_USER]
/** = anon
```
## History 历史
Version 1.2.0 : shiro-cas 模块第一个发布版本.
- Introduction
- 1. Introduction 介绍
- 2. Tutorial 教程
- 3. Architecture 架构
- 4. Configuration 配置
- 5. Authentication 认证
- 6. Authorization 授权
- 6.1. Permissions 权限
- 7. Realms
- 8. Session Management
- 9. Cryptography 密码
- 10. Web
- 10.1. Configuration 配置
- 10.2. 基于路径的 url 安全
- 10.3. Default Filters 默认过滤器
- 10.4. Session Management
- 10.5. JSP Tag Library
- 11. Caching 缓存
- 12. Concurrency & Multithreading 并发与多线程
- 13. Testing 测试
- 14. Custom Subjects 自定义 Subject
- 15. Spring Framework
- 16. Guice
- 17. CAS
- 18. Command Line Hasher
- 19. Terminology 术语
- 20. 10 Minute Tutorial 十分钟教程
- 21. Beginner's Webapp Tutorial 初学者web应用教程
- 22. Application Security With Apache Shiro 用Shiro保护你的应用安全
- 23. CacheManager 缓存管理
- 24. Apache Shiro Cryptography Features 加密功能