saml - QLGQ/learning-python GitHub Wiki
Reference
Introduction
SAML(Security Assertion Markup Language)即安全声明标记语言,它是一个基于XML的标准,用于在不同的安全域(security domain)之间交换认证和授权数据。SAML标准定义了身份提供者(identity provider)和服务提供者(service provider),这两者构成了前面所说的不同的安全域。SAML是OASIS(the Organization for the Advancement of Structured Information Standards)标准组织安全服务技术委员会(Security Service Technical Committee)的产品。
Definition
SAML是一个XML框架,也就是一组协议和规范,可以用来传输企业用户身份证明,主要是企业外的身份跨越传递。比如,公司(idp)的用户要访问SAAS应用(sp),为了保证身份安全,我们可以采用除了加密签名等措施,还要采用SAML规范来传输,传输的数据以XML形式,内容符合SAML的推荐标准,这样我们就可以不要求idp和sp采用什么样的系统,只要求能理解SAML规范即可,显然比传统的方式更好。SAML规范是一组Schema定义。
可以这么说,在Web Service领域,schema就是规范。
Basic Concepts
- Assertions: 定义交互的数据格式
- Protocols: 定义交互的消息格式
- Bindings: 定义如何与常见的通信协议绑定
- Profiles: 给出对SAML断言及协议如何使用的建议
Assertions
- 定义了一系列的XML编码格式安全断言的语法和语义规范
- 断言种类:
- 认证:断言主体在特定的时间通过特定的方式被认证过
- 属性:断言主体与提供的属性相关联
- 授权结果:断言主体对特定资源的访问请求通过或被拒绝
- 还定义了断言中使用的名称标识符、主体、声明、条件等内部结构的语法和语义
Protocols
- 定义了如何在系统实体间传递和处理SAML断言的协议集合
- 包括:
- 断言查询和请求协议(Assertion Query and Request Protocol)
定义了断言可能拥有的一系列查询,该协议的请求形式可以通过引用一个断言ID来向一个断言提供方请求已经存在的对应的断言;协议的查询形式则定义了一个依赖方如何在特定的主体和所需的语句类型的基础上来请求断言。 - 认证请求协议(Authentication Request Protocol)
定义了一个主体(或者主体的代理)是如何来请求一个包含认证信息以及可选的属性信息的断言的机制。 - 假名解析协议(Artifact Resolution Protocol)
SAML消息通过值 或者 值引用 从一个实体传到另一个实体。对SAML消息的引用被成为artifact。Artifact的接受者,通过直接发送samlp:ArtifactResolve请求到artifact的发布者 来处理引用,然后发布者响应由artifact引用的真实的消息。 - 名称标识符管理协议(Name Identifier Management Protocol)
提供了修改一个主体的名称标识的内容或形式的机制,同时也提供了终止身份提供者(IDP)与服务提供者(SP)的名称标识对应连接关系的机制。 - 单点登出协议(Single Logout Protocol)
定义了一个机制,允许几乎同时注销与主体相关的活动会话。注销可以直接由用户发起的,也可能由于会话过期或者管理员命令而被IDP或SP初始化。 - 名称标识符映射协议(Name Identifier Mapping Protocol)
提供了一种机制以编程方式将一个SAML的名字标识符通过适当的策略映射到另一个主体;例如,在一个应用集成方案中它允许一个SP向一个IDP请求某个用户的标识,SP可以在另一个SP中使用该标识。
- 断言查询和请求协议(Assertion Query and Request Protocol)
Instance:
<samlp:AuthnRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="aaf23196-1773-2113-474a-fe114412ab72"
Version="2.0"
IssueInstant="2004-12-05T09:21:59Z"
AssertionConsumerServiceIndex="0"
AttributeConsumingServiceIndex="0">
<saml:Issuer>https://sp.example.com/SAML2</saml:Issuer>
<samlp:NameIDPolicy
AllowCreate="true"
Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
</samlp:AnthRequest>
Bindings
SAML协议可以进行如下的绑定:
- SAML SOAP Binding (SOAP 1.1)
定义了如何基于SOAP1.1,在HTTP上使用SOAP来传输SAML消息。 - Reverse SOAP (PAOS) Binding
定义了一个多级SOAP/HTTP消息交换允许HTTP客户端是一个SOAP应答。用于增强客户端和代理配置使客户与代理能够协助进行IDP发现。 - HTTP Redirect (GET) Binding
定义了如何使用HTTP重定向消息传输SAML消息。 - HTTP POST Binding
定义了如何使用HTML的表单控件的64位编码内容来传输SAML消息。 - HTTP Artifact Binding
使用Artifact Resolution Protocol和HTTP之上的SOAP绑定根据引用来处理SAML消息。 - SAML URI Binding
定义了如何通过解析URI来检索对应的SAML断言。
Profiles
SAML使用框架推荐:
- SSO Profiles
- Web Browser SSO Profile
定义了一个SAML实体如何使用认证请求协议与SAML响应消息以及断言来实现标准浏览器的单点登录;它定义了消息是如何HTTP重定向,HTTP POST,以及HTTP Artifact绑定结合使用的。 - Enhanced Client or Proxy (ECP) Profile
定义了一个特殊的SSO配置,在该配置中客户端和网关代理使用SOAP绑定与反SOAP绑定。 - Identity Provider Discovery Profile
为SP提供了一种可能的机制,使得SP可以了解用户以前访问过的IDP信息。 - Single Logout Profile
定义了SAML单点注销协议如何结合SOAP,HTTP Redirect,HTTP POST, 以及HTTP Artifact绑定来使用。 - Name Identifier Management Profile
定义了命名身份管理协议如何结合SOAP,HTTP Redirect,HTTP POST, 以及HTTP Artifact绑定来使用。
- Web Browser SSO Profile
- Artifact Resolution Profile
定义了SAML实体如何使用Artifact解决协议来在一个同步绑定协议(例如SOAP)上通过一个artifact的引用来获取协议信息。 - Assertion Query/Request Profile
定义了SAML实体如何使用SAML查询和请求协议来在一个同步绑定协议(例如SOAP)上获取SAML断言。 - Name Identifier Mapping Profile
定义了命名身份映射协议是如何使用同步绑定(例如SOAP)的。 - Attribute Profiles
定义了属性协议使如何使用同步绑定协议(例如SOAP)DE。
Web Browser SSO Profile
分两种:
- Browser/POST
- Browser/Artifact
Browser/POST Profile
- A SAML 2.0 Browser/Post Profile (others are possible) consists of eight steps:
- Request the target resource [SP]
- Redirect to the Single Sign-on (SSO) Service
- Request the SSO Service [IdP]
- Respond with an HTML form
- Request the Assertion Consumer Service [SP]
- Redirect to the target resource
- Request the target resource again [SP]
- Respond with the requested resource
- HTTP Redirect is one possible binding at step 2
- Instead, the AuthnRequest may be POSTed to the IdP
- Even HTTP Artifact may be used at step 2
Browser/Artifact Profile
- A SAML2 Browser/Artifact Profile with 12 steps:
- Request the target resource [SP]
- Redirect to the Single Sign-on (SSO) Service
- Request the SSO Service [IdP]
- Request the Artifact Resolution Service [SP]
- Respond with a SAML AuthnRequest
- Redirect to the Assertion Consumer Service
- Request the Assertion Consumer Service [SP]
- Request the Artifact Resolution Service [IdP]
- Respond with a SAML Assertion
- Redirect to the target resource
- Request the target resource again [SP]
- Respond with the requested resource
- Both the AuthnRequest and the assertion are obtained via back-channel exchanges
- This is a new capability in SAML 2.0
SAML Programming
- JAVA上的SAML开发
- OpenSAML提供的开源实现包
- 具体的使用方式可参考OpenSAML网站上提供的手册,也可参考Shibboleth项目的实现源码
- Shibboleth项目
- Shibboleth是一个开源的基于Web的身份管理单点登录系统
- 支持SAML2.0标准,实现了SAML2.0中规定几个Profile