将 Apache Shiro 与 CAS SSO 服务器集成

NOTE:

Shiro-CAS 支持已弃用,支持已移至基于 Apache Shiro 的buji-pac4j项目。

对 CAS 协议的基本了解

http://application.examples.com/protected/index.jsp → HTTP 302 → https://server.cas.com/login?service=http://application.examples.com/shiro-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
http://application.examples.com/shiro-cas?ticket=ST-4545454542121-cas → HTTP 302 → http://application.examples.com/protected/index.jsp

如何配置 shiro 以与 CAS 服务器一起使用?

Dependency

您需要在应用程序中添加* shiro-cas * Maven 依赖项:

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-cas</artifactId>
    <version>version</version>
</dependency>

(version> = 1.2.0)。

CasFilter

您必须定义应用程序的服务 URL(必须也在 CAS 服务器中声明)。该 URL 将用于接收 CAS 服务凭单。例如:http://application.examples.com/shiro-cas

在 shiro 配置中,您必须定义CasFilter

[main]
casFilter = org.apache.shiro.cas.CasFilter
casFilter.failureUrl = /error.jsp

(当服务票证验证失败时,将调用失败 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

NOTE:

如果选择 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>

CasSubjectFactory

在 CAS 服务器中,您可以具有“记住我”的支持。通过 SAML 验证或 CAS 定制验证来推送此信息。
要在 Shiro 中反映 CAS 记住我的状态,您必须在 Shiro 配置中定义一个特定的CasSubjectFactory

[main]
casSubjectFactory = org.apache.shiro.cas.CasSubjectFactory
securityManager.subjectFactory = $casSubjectFactory

应用程序的安全性

最后,您必须定义应用程序的安全性。

在您的 Shiro 配置中,您必须使用角色来保护 url(例如):

[urls]
/protected/** = roles[ROLE_USER]
/** = anon

如果用户未通过身份验证,则登录 URL 将在 CAS 服务器上使用应用程序服务 URL 进行定义:

[main]
roles.loginUrl = https://server.cas.com/login?service=http://application.examples.com/shiro-cas

这样,如果未通过身份验证并尝试访问*/protected/*** url,则会将您重定向到 CAS 服务器以进行身份验证。

完整的配置 samples

[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

*版本 1.2.0 shiro-cas *模块的第一个版本。

首页