PicketLink是一个开源的安全框架(不便于集成,需要二次开发),为Java EE应用提供安全(认证、授权、权限访问API)和IDM方案。在WildFly AS 10中,默认已经提供了对PicketLink 2.5.5.SP1的集成。
基于PicketLink,可以在WildFly AS 10中实现兼容SAML标准的SSO。
1.基于SAML的SSO概述
1)SSO中的几个概念
Service Provider (SP)就是部署在应用服务器上的各个应用。
IdentityProvider (IdP),负责对SP的访问请求进行身份验证。2)SP发起的SSO处理过程
a.用户请求访问SP(就是一个普通的Web应用)
b.SP代理检查用户请求的授权,如果用户还没有被认证则将请求重定向到IdP
c.IdP给出登录页面,用户输入认证信息
d.IdP查询数据库,检查用户输入的有效性
e.如果用户有效,IdP为该用户创建一个会话,并签发一个SAML Assertion
f.IdP将带有SAML Assertion 和用户信息的用户请求返回给SP
g.SP检查SAML Assertion 确认用户有效
h.SP检查用户的权限,授权用户访问应用
2.基于PicketLink的IdP(Identity Provider)应用的配置
IdP也是一个Web应用,集中负责对用户信息的认证并签发SAMLAssertion 。
SAML Assertion 就是IdP认证后为用户签发的一个信息集合,这些信息是从用户识别数据库(如LDAP或数据库等)中获取的。SAMLAssertion 用于SP对用户的鉴权。
IdP的配置如下:
1) 在WEB-INF/web.xml中,设置安全约束和登录配置
<security-constraint>
<web-resource-collection>
<web-resource-name>Manager command</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>manager</role-name>
<role-name>Sales</role-name>
<role-name>Employee</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>PicketLink IDP Application</realm-name>
<form-login-config>
<form-login-page>/jsp/login.jsp</form-login-page>