您的位置:首页 > 其它

SAML2.0 协议初识(一)

2017-12-21 14:43 375 查看

一、什么是SAML协议?

SAML即安全断言标记语言,英文全称是SecurityAssertionMarkupLanguage。它是一个基于XML的标准,用于在不同的安全域(securitydomain)之间交换认证和授权数据。在SAML标准定义了身份提供者(identityprovider)和服务提供者(serviceprovider),这两者构成了前面所说的不同的安全域。SAML是OASIS组织安全服务技术委员会(SecurityServicesTechnicalCommittee)的产品。

SAML(SecurityAssertionMarkupLanguage)是一个XML框架,也就是一组协议,可以用来传输安全声明。比如,两台远程机器之间要通讯,为了保证安全,我们可以采用加密等措施,也可以采用SAML来传输,传输的数据以XML形式,符合SAML规范,这样我们就可以不要求两台机器采用什么样的系统,只要求能理解SAML规范即可,显然比传统的方式更好。SAML规范是一组Schema定义。

可以这么说,在WebService领域,schema就是规范,在Java领域,API就是规范。

二、SAML协议的作用

认证声明:声明用户是否已经认证,通常用于单点登录。

属性声明:声明某个Subject所具有的属性。

授权决策声明:声明某个资源的权限,即一个用户在资源R上具有给定的E权限而能够执行A操作。

三、SAML相关定义

SP(ServiceProvider):向用户提供正式商业服务的实体,通常需要认证一个用户的身份;

IDP(IdentityProvider):提供用户的身份鉴别,确保用户是其所声明的身份

断言(Assertions)即信息:断言是在SAML中用来描述认证的对象,其中包括一个用户在什么时间、以什么方式被认证,同时还可以包括一些扩展信息,比如用户的Email地址和电话等等。下面是一个断言的例子:



1<?xmlversion="1.0"?>
2<saml:Assertionxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xs="http://www.w3.org/2001/XMLSchema"ID="_d71a3a8e9fcc45c9e9d248ef7049393fc8f04e5f75"Version="2.0"IssueInstant="2014-07-17T01:01:48Z">
3<saml:Issuer>http://idp.example.com/metadata.php</saml:Issuer>
4<saml:Subject>
5<saml:NameIDFormat="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">xiaosy@bw30.com</saml:NameID>
6<saml:SubjectConfirmationMethod="urn:oasis:names:tc:SAML:2.0:cm:bearer">
7<saml:SubjectConfirmationDataNotOnOrAfter="2024-01-18T06:21:48Z"Recipient="http://sp.example.com/demo1/index.php?acs"InResponseTo="ONELOGIN_4fee3b046395c4e751011e97f8900b5273d56685"/>
8</saml:SubjectConfirmation>
9</saml:Subject>
10<saml:ConditionsNotBefore="2014-07-17T01:01:18Z"NotOnOrAfter="2024-01-18T06:21:48Z">
11<saml:AudienceRestriction>
12<saml:Audience>http://sp.example.com/demo1/metadata.php</saml:Audience>
13</saml:AudienceRestriction>
14</saml:Conditions>
15<saml:AuthnStatementAuthnInstant="2014-07-17T01:01:48Z"SessionNotOnOrAfter="2024-07-17T09:01:48Z"SessionIndex="_be9967abd904ddcae3c0eb4189adbe3f71e327cf93">
16<saml:AuthnContext>
17<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef>
18</saml:AuthnContext>
19</saml:AuthnStatement>
20<saml:AttributeStatement>
21<saml:AttributeName="uid"NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
22<saml:AttributeValuexsi:type="xs:string">test</saml:AttributeValue>
23</saml:Attribute>
24<saml:AttributeName="mail"NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
25<saml:AttributeValuexsi:type="xs:string">test@example.com</saml:AttributeValue>
26</saml:Attribute>
27<saml:AttributeName="eduPersonAffiliation"NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
28<saml:AttributeValuexsi:type="xs:string">users</saml:AttributeValue>
29<saml:AttributeValuexsi:type="xs:string">examplerole1</saml:AttributeValue>
30</saml:Attribute>
31</saml:AttributeStatement>
32</saml:Assertion>






协议(Protocol)即通信:协议规定如何执行不同的行为。这些行为被细化成一些列的Request和Response对象,而在这些请求和相应的对象中包含了行为所特别需要的信息。比如,认证请求协议(AuthnRequestProtocol)就规定了一个SP如何请求去获得一个被认证的与用户。
这是一个AuthnRequest对象示例:



1<?xmlversion="1.0"?>
2<samlp:AuthnRequestxmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"ID="ONELOGIN_809707f0030a5d00620c9d9df97f627afe9dcc24"Version="2.0"ProviderName="SPtest"IssueInstant="2014-07-16T23:52:45Z"
Destination="http://idp.example.com/SSOService.php"ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"AssertionConsumerServiceURL="http://sp.example.com/demo1/index.php?acs">
3<saml:Issuer>http://sp.example.com/demo1/metadata.php</saml:Issuer>
4</samlp:AuthnRequest>





绑定(Binding)即传输:绑定定义了SAML信息如何使用通信协议被传输的。比如,HTTP重定向绑定,即声明SAML信息将通过HTTP重定向消息传输;再比如SAMLSOAP绑定,声明了通过SOAP来传递SAML消息。比如上面AuthnRequest就声明了Http-POst绑定

元数据(MetaData):SAML的元数据是配置数据,其包含关于SAML通信各方的信息,比如通信另一方的ID、WebService的IP地址、所支持的绑定类型以及通信中实用的密钥等等。

四、SAML协议流程分析:

SAML协议内容比较复杂,绑定方式不只一个,在这里我们以应该算是最简单的一种绑定方式HTTP-POST方式说明SAML协议的工作流程(好吧,其实是其他的还没有了解呢





1、用户通过浏览器访问SP的某个受保护的资源
2、SP鉴别到该用户未鉴权,于是将该用户重定向到IDP端;前提是改IDP是受SP信任的身份认证中心;
3、IDP端通过自己的认证方式对该用户合法性进行认证;
4、认证通过后,IDP端生成响应后返回给SP
5、SP接收到IDP的响应后解析出用户认证信息,合法,则允许用户访问受保护的资源

接下来,我将分别从SP端和IDP端对一些常用的参数进行介绍,并且最后给出一个简单的demo,敬请期待
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: