美文网首页
SAML概念

SAML概念

作者: 是你的小凉凉呀 | 来源:发表于2020-07-05 03:45 被阅读0次

    SAML

    SAML是一种XML框架用来交换安全信息,其中定义了按照安全规范所需要的通信的协议和格式。

    SAML是一种中心化的认证机制,其定义了两种实体相互通信:

    • Service Provider(SP): 向用户提供正式商业服务的实体,通常需要认证一个用户的身份(比如本次开发服务的员工管理系统,财务报销系统等);
    • Identity Provider(IDP): 提供用户的身份鉴别方,用以确保用户是其所声明的身份(比如本次公司提供统一登录的sso方);

    SAML的重要用途:

    • 单点登录(SSO Single Sign-ON);
    • 联合认证(Federated Identity);
    • 在其他架构内使用SAML,比如WS-Security;

    SAML在单点登录中大有用处:在SAML协议中,一旦用户身份被主网站IDP认证过后,该用户再去访问其他在主站注册过的应用SP时,都可以直接登录,而不用再输入身份和口令。

    OPENSAML

    OpenSAML是一个便于使用SAML消息的依赖库,其提供的主要功能包括:

    1. 创建SAML消息;
    2. 解析SAML对象并导出为XML格式;
    3. 签名和加密;
    4. 对SAML消息进行编码并传输。

    目前OpenSAML库提供Java和C++实现的版本,需要注意的是OpenSAML虽然多应用用于SSO(单点登录)的开发中,

    但是该库本身不提供任何身份识别和授权的功能,其只是实现对于SAML消息的相关操作而已。

    SAML通过Web浏览器实现的协议流程

    saml.png

    1. 用户尝试获得权限

    流程首先从一个非认证的用户开始,该用户尝试从一个受保护的SP那里获得访问权限。某种方式的过滤器被设置在访问路径上来检测用户是否被授权。

    这一部分其实并不是SAML协议里的内容,但是却决定了是否要被授权。

    2. 用户被重定向到IDP

    当访问路径上被设置的过滤器发现用户并非是被认证的,将会自动把用户从定向到IDP,以求验证用户的身份。

    3. 用户被认证

    在这一步里,用户被认证。注意这里并没任何涉及到SP的交互,在安全方式内,IDP对于认证用户有着全权责任。

    4. 已认证的用户被从定向回SP

    当用户被认证成功之后,用户会携带着SAML产物(SAML artifact)被从定向回SP。这样的SAML产物也可以说是认证信息的标识,因为认证信息中有敏感的信息不能直接通过浏览器传输,所以这里只是发送标识而已。

    5. 要求认证信息

    当收到SAML产物之后,SP将其发送回IDP,IDP依据SAML产物找到认证信息,并通过SAML产物响应(SAML Artifact Response)发送回SP

    SAML相关定义

    1. 断言(Assertions) 即信息

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

    <saml2:Assertion>
          <saml2:Issuer>IDP</saml2:Issuer>
          <ds:Signatur>
             <ds:SignedInfo>
                <ds:CanonicalizationMethod/>
                <ds:SignatureMethod/>
                <ds:Reference>
                   <ds:Transforms>....</ds:Transforms>
                   <ds:DigestMethod/>
                   <ds:DigestValue>xxx</ds:DigestValue>
                </ds:Reference>
             </ds:SignedInfo>
             <ds:SignatureValue>xxx</ds:SignatureValue>
             <ds:KeyInfo><ds:X509Data><ds:X509Certificate>xxx</ds:X509Certificate></ds:X509Data></ds:KeyInfo>
          </ds:Signature>
          <saml2:Subject>
             <saml2:NameID>zhang.san@abc.com</saml2:NameID>
             <saml2:SubjectConfirmation>...</saml2:SubjectConfirmation>
          </saml2:Subject>
          <saml2:Conditions><saml2:AudienceRestriction>...</saml2:AudienceRestriction></saml2:Conditions>
          <saml2:AuthnStatement><saml2:AuthnContext>...</saml2:AuthnContext></saml2:AuthnStatement>
          <saml2:AttributeStatement>...</saml2:AttributeStatement>
       </saml2:Assertion>
    

    2. 协议(Protocol)即通信

    协议规定如何执行不同的行为。这些行为被细化成一些列的Request和Response对象,而在这些请求和相应的对象中包含了行为所特别需要的信息。

    比如,认证请求协议(AuthnRequest Protocol)就规定了一个SP如何请求去获得一个被认证的与用户。

    <saml2p:AuthnRequest
        AssertionConsumerServiceURL=http://xxxx
        Destination="http://xxx"
        ID="_52c9839568ff2e5a10456dfefaad0555"
        IssueInstant="2020-05-11T02:37:05.469Z"
        ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTPArtifact"
        Version="2.0">
        <saml2:Issuer>xxx</saml2:Issuer>
        <saml2p:NameID
            PolicyAllowCreate="true"
            Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
        <saml2p:RequestedAuthnContext Comparison="minimum">
            <saml2:AuthnContextClassRef>
                urn:oasis:names:tc:SAML:2.0:ac:classes:Password
            </saml2:AuthnContextClassRef>
        </saml2p:RequestedAuthnContext>
    </saml2p:AuthnRequest>
    

    3. 绑定(Binding)即传输

    绑定定义了SAML信息如何使用通信协议被传输的。

    其实SAML2.0中支持很多种绑定方式,如下都方式在OpenSAML中都有实现:

    • SAML SOAP Binding (based on SOAP 1.1)
    • Reverse SOAP (PAOS) Binding
    • HTTP Redirect (GET) Binding
    • HTTP POST Binding
    • HTTP Artifact Binding
    • SAML URI Binding

    配置(Profiles) 即综合

    配置定义了如何组织以上信息,并且在一个更高的层次上描述断言,协议和绑定如何被使用去解决一个具体情况。比如Web浏览器的SSO配置就描述了如何一个用户使用浏览器被认证。

    元数据(MetaData)

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

    OpenSaml中提供了metadata provider来帮助构建和解读元数据。

    google 和 火狐带有插件工具 SAML TRACER,在浏览器中添加一个窗口来显示SAML消息

    相关文章

      网友评论

          本文标题:SAML概念

          本文链接:https://www.haomeiwen.com/subject/vgemqktx.html