OAuth2 SAML bearer spec描述了应用程序如何向令牌端点提供断言作为授权授权。例如,Salesforce's API允许此方法使应用程序能够自动请求用户帐户的访问令牌(只要用户已经授予此带外权限)。
但是,我无法理解断言的含义。大部分都很清楚,例如Issuer
是生成(并签署)断言的一方Subject
是其帐户正在请求访问令牌的用户AudienceRestriction
将受众限制在令牌端点。但我无法理解其中的含义:
AuthnStatement
- 我对SAML规范的理解是,该断言的发布者正在声明它(发行者)已对该主题进行了身份验证。这是对的吗?
SubjectConfirmation
- 谁来确认这里有什么? SAML规范有助于说明此元素“允许确认主题的信息”。但什么是确认?谁执行它,以及如何,何时,为了什么目的?
答案 0 :(得分:4)
AuthnStatement
元素描述了身份提供者的身份验证行为。
如果Assertion发行者对主题进行了身份验证,则断言应该包含一个表示该身份验证事件的单词。
示例:
<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
元素允许授权服务器将其确认为承载断言。这样的元素必须有一个Method属性,其值为“urn:oasis:names:tc:SAML:2.0:cm:bearer”。
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 POTS token endpoint URL -->
Recipient="https://sp.example.com/SAML2/SSO/POST"
<!-- Not valid ON or After this Date-->
NotOnOrAfter="2004-12-05T09:27:05"/>
</saml:SubjectConfirmation>
答案 1 :(得分:1)
是的,guzzlehttp/psr7
来自此断言的发布者,声明它已对该主题进行了身份验证。
AuthnStatement
告诉想要依赖断言的实体如何确认有问题的主题是该断言中引用的主题。也许断言是有效的,但它是由用户提出请求吗?如果该方法是承载者,那么可以在SubjectConfirmation
中的日期之前向Recipient
中引用的端点提供此断言的任何主体进行确认。如果该方法是持有者,那么只有能够证明拥有嵌套NotOnOrAfter
元素引用的密钥的主体才会被确认。