越来越多的系统通过Web服务、门户和集成化应用程序彼此链接,对于保证欲共享的信息安全交换的标准的需求也随之日益显著起来。SAML(安全性断言标记语言,Security Assertion Markup Language)提供了一个健壮且可扩展的数据格式集,在各种环境下交换数据和身份识别信息。这里的一个关键概念是身份联邦,它可满足SAML的定义,也就是说可使用独立、受管理的多个信息来源中的信息,从而实现身份严整这样的安全服务。SAML连同单点登录(SSO)共同构成现代网络环境中的必备的条件。
SAML并不是一项新技术。确切地说,它是一种语言,是一种XML描述,目的是允许不同安全系统产生的信息进行交换。
SAML基本原理
SAML将所有与检索、传输和共享安全信息相关的功能标准化为以下形式:
· 为用户提供XML安全信息格式和请求及传输信息的格式。
· 定义这些消息与SOAP等协议协作的方式。
· 为像Web SSO这样的常见用例定义精确的消息交换。
· 支持众多种隐私保护机制,包括在不披露用户身份的情况下确定用户属性的功能。
· 详述在Unix、Microsoft Windows、X509、LDAP、DCE和XCML这些广泛应用的技术所提供的格式中处理身份信息的方法。
· 提供一种系统的元数据机制,使得所有参与其中的系统能就所支持的SAML选项进行通讯。
此外,SAML的设计特别关注了灵活性。遇到标准尚未涵盖的需求时可扩展。
SAML应用的实现由三部分组成:(1)主体(Principals),即用户。(2)服务提供者(Service Providers,SP),即各种应用系统。(3)身份提供者(Identity Providers,IDP),即身份认证服务器。 很多应用系统服务器可以同时实现SP和IDP功能。SAML的核心为断言(Assertion),断言可传递主体执行的认证信息、属性信息及关于是否允许主体访问其资源的授权决定。针对以上不同目的,SAML提供以下几种不同类型的安全断言:
认证断言(Authentication Assertion):认证断言用来声称消息发布者已经认证特定的主体。 属性断言(Attribute Assertion):属性断言声称特定主体具有特定的属性。属性可通过URI(统一资源标识)或用来定义结构化属性的一种扩展模式进行详细说明。
决定断言(Decision Assertion):一个决定断言报告了一个具体授权请求的结果。
授权断言(Authorization Assertion):授权断言声称一个主体被给予访问一个或多个资源的特别许可。
设计思路:
1、如何在过个应用系统(SP)之间传递登录信息。在多个应用系统(SP)之间一一建立联系是难以实现的,为此则可以考虑建立一个中心的认证 服务(IDP)。各个应用在检测到未登录之后,转去这个统一的认证服务,确认是否已经登录,并获取登录用户的身份信息。
2、各个应用系统 (SP)如何检查用户是否已经登录。各个Servlet和JSP都是通过URL来提供访问,当用户访问的时候,如果每个Servlet和JSP都去统一认 证服务进行检查,开发的开销非常大。非常幸运的是,在Servlet的规范(版本2.3以上)中提供了一种组织形式——Filter,即针对HTTP访问 的过滤器。通过Filter机制,对于每一个应用系统(SP),在一个集中的点进行身份认证的检查即可。
3、首先提供一个集中的中心认证服务器(IDP),通过这个认证服务器来进行用户的身份认证。 各个应用系统(SP)在原有实现的基础之上,增加一个Filter来进行是否登录的检测。 当访问某个应用系统(SP)时,Filter首先检查是否已经登录到了当前系统。如果尚未登录,则将请求转向认证服务器(IDP),检查是否已经在中心认证 服务器上登录;如果确认在中心认证服务器(IDP)登录了,则过滤器自动完成登录;如果确认了尚未在中心认证服务器登录,则提示用户输入相应的信息完成登 录即可。
步骤:
① 用户访问SP;
② SP检查自身的用户Session,如果Session存在,表明用户已经登录,直接跳转到⑧,否则重定向到IDP的登录界面;
③ IDP提示用户登录;
④ 如果验证成功,IDP即生成用户登录Session,身份认证断言和Artifact,并建立断言与Artifact的对应关系,然后将此 Artifact作为参数向用户发送HTTP重定向指令;
⑤ 用户被重定向到SP;
⑥ SP根据此Artifact向IDP发送AuthnRequest请求;
⑦ IDP查询Artifact与断言的对应表后,用私钥对此断言进行签名,将签名后的断言发送给SP;
⑧ SP收到断言,先用IDP的公钥验证断言的真实性,然后再查询系统自身的权限检查模块,如果有权访问,则生成用户登录Session,并将系统界面返回给 用户,用户登录成功。
具体实现:
① 首先认证服务(IDP)提供一个UserInfo的类,封装了各个应用系统最基本的登录信息。
② IDP根据用户信息生成相应的SAML 断言和Artifact。参考opensaml1.1提供的POSTProfileTest.java,用于生成 SAMLResponse并进行签名。
③ 自动提交表单 。在 IDP响应给用户的页面包含了一个自动提交的表单,将SAML Assertion Token通过HTTP POST提交给用户请求的SP页面。这部分由SAML1.1中的 Browser/POST Profile定义。由于生成的SAML Assertion往往比较大,不能通过HTTP GET提交,因此通过自动提交表单完成。
参考文档:http://wenku.baidu.com/view/4e4f8b1ab7360b4c2e3f64ba.html
http://blog.csdn.net/javachannel/article/details/752437/
认证断言(Authentication Assertion):认证断言用来声称消息发布者已经认证特定的主体。 属性断言(Attribute Assertion):属性断言声称特定主体具有特定的属性。属性可通过URI(统一资源标识)或用来定义结构化属性的一种扩展模式进行详细说明。
决定断言(Decision Assertion):一个决定断言报告了一个具体授权请求的结果。
授权断言(Authorization Assertion):授权断言声称一个主体被给予访问一个或多个资源的特别许可。
SAML断言以XML结构描述且具有嵌套结构,由此
单
点登录(
SSO
,
Single Sign-on
)是一种方便用户访问多个系统的技术,用户只需在登录时
进行一次注册,
就可以在多个系统间自由穿梭,
不必重复输入用户名和密码来确定身份。
单
点登录的实质就是安全上下文(
AISSO Context
)或凭证(
Credential
)在多个应用系统之间的
传递或共享。
当用户登录系统时,
客户端软件根据用户的凭证
(例如用户名和密码)
为用
户
建立一个安全上下文,
安全上下文包含用于验证用户的安全信息,
系统用这个安全上下文和
安全策略来判断用户是否具有访问系统资源的权限。
单
点登录(
SSO
,
Single Sign-on
)是一种方便用户访问多个系统的技术,用户只需在登录时
进行一次注册,
就可以在多个系统间自由穿梭,
不必重复输入用户名和密码来确定身份。
单
点登录的实质就是安全上下文(
AISSO Context
)或凭证(
Credential
)在多个应用系统之间的
传递或共享。
当用户登录系统时,
客户端软件根据用户的凭证
(例如用户名和密码)
为用
户
建立一个安全上下文,
安全上下文包含用于验证用户的安全信息,
系统用这个安全上下文和
安全策略来判断用户是否具有访问系统资源的权限。
单点登录(SSO,Single Sign-on)是一种方便用户访问多个系统的技术,用户只需在登录时进行一次注册,就可以在多个系统间自由穿梭,不必重复输入用户名和密码来确定身份。 单点登录的实质就是安全上下文(AISSO Context)或凭证(Credential)在多个应用系统之间的传递或共享。当用户登录系统时,客户端软件根据用户的凭证(例如用户名和密码)为用 户建立一个安全上下文,安全上下文包含用于验证用户的安全信息,系统用这个安全上下文和安全策略来判断用户是否具有访问系统资源的权限。