10

OAuth2 SAML 不记名规范描述了应用程序如何将断言作为授权授予呈现给令牌端点。例如,Salesforce 的 API允许这种方法使应用程序能够自主地为用户帐户请求访问令牌(只要用户已经为此授予权限,带外)。

不过,我无法理解断言的含义。大部分都很清楚,例如

  • Issuer是生成(并签署)断言的一方
  • Subject是为其帐户请求访问令牌的用户
  • AudienceRestriction将观众限制在令牌端点。

但我无法理解以下内容的含义:

  • AuthnStatement——我对 SAML 规范的理解是,这个断言的发布者正在声明它(发布者)已经对主题进行了身份验证。这是正确的吗?

  • SubjectConfirmation——谁在这里确认什么?SAML 规范有助于说明此元素“允许确认主题的信息”。但什么是确认?谁执行它,如何执行,何时执行,目的是什么?

4

2 回答 2

8

AuthnStatement元素描述身份提供者的身份验证行为。如果断言发布者对主题进行了身份验证,则断言应该包含一个表示该身份验证事件的单个。

例子:

    <AuthnStatement AuthnInstant="2010-10-01T20:07:34.371Z">
            <AuthnContext>
              <AuthnContextClassRef>
    <!--Authentication method, was the client authenticated with digital cert, password, kerberos token?-->
                urn:oasis:names:tc:SAML:2.0:ac:classes:X509 

<!--For example, the Password class is applicable when a principal authenticates to an authentication authority through the presentation of a password over an unprotected HTTP session. -->
                urn:oasis:names:tc:SAML:2.0:ac:classes:Password

                urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos

              </AuthnContextClassRef>
            </AuthnContext>
          </AuthnStatement>

SubjectConfirmation元素允许授权服务器将其确认为承载断言。此类元素必须具有值为“urn:oasis:names:tc:SAML:2.0:cm:bearer”的 Method 属性。SubjectConfirmation 元素必须包含一个 SubjectConfirmationData 元素(有例外),指示授权服务器的令牌端点 URL。授权服务器必须验证 Recipient 属性的值是否与向其传递断言的令牌端点 URL 匹配。

例子:

     <saml:SubjectConfirmation
<!-- Mandatory -->
       Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
       <saml:SubjectConfirmationData 
<!-- The AuthRequest sent this ID -->
         InResponseTo="aaf23196-1773-2113-474a-fe114412ab72"
<!-- It was through HTTP POST token endpoint URL -->
         Recipient="https://sp.example.com/SAML2/SSO/POST"
<!-- Not valid ON or After this Date and Time -->
         NotOnOrAfter="2004-12-05T09:27:05"/>
     </saml:SubjectConfirmation>
于 2013-12-13T13:49:49.463 回答
3

是的,AuthnStatement来自此断言的发布者,声明它已经验证了主题。

SubjectConfirmation告诉想要依赖断言的实体如何确认所讨论的主题是此断言中引用的主题。也许断言是有效的,但它是针对发出请求的用户吗?如果该方法是不记名的,那么任何可以Recipient在日期之前向引用的端点提出此断言的主体都NotOnOrAfter被确认。如果该方法是密钥持有者,则只有能够证明拥有嵌套KeyInfo元素引用的密钥的主体才能被确认。

于 2017-01-03T21:34:30.827 回答