我的任务是设计一个非常简单的 SSO(单点登录)流程。我的雇主已指定它应该在 SAML 中实施。我想在确认 SAML 规范的同时创建尽可能简单的消息。
如果你们中的一些人能查看我的请求和响应消息并告诉我它们是否对我的目的有意义,它们是否包含任何不需要的内容,以及它们是否缺少任何有用的信息,我将非常感激需要在那里。
此外,我想知道我应该在回复中的哪个位置添加有关该主题的其他信息;特别是主题的电子邮件地址。
交互需要按以下方式工作:
- 此时用户向服务提供者请求服务,服务提供者对用户一无所知。
- 服务提供者向身份提供者请求用户身份验证
- 用户由身份提供者认证/注册
- 身份提供商向服务提供商响应身份验证成功消息、PLUS 用户的电子邮件地址。
我认为请求应该是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
ID="abc"
IssueInstant="1970-01-01T00:00:00.000Z"
Version="2.0"
AssertionConsumerServiceURL="http://www.IdentityProvider.com/loginPage">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
http://www.serviceprovider.com
</saml:Issuer>
<saml:Subject>
<saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">3f7b3dcf-1674-4ecd-92c8-1544f346baf8</saml:NameID>
</saml:Subject>
以下是我认为应该做出的回应:
<?xml version="1.0" encoding="UTF-8"?>
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" Destination="http://www.serviceprovider.com/desitnationURL" ID="123" IssueInstant="2008-11-21T17:13:42.872Z" Version="2.0">
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</samlp:Status>
<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Version="2.0">
<saml:Subject>
<saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">3f7b3dcf-1674-4ecd-92c8-1544f346baf8</saml:NameID>
<saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:profiles:SSO:browser">
<saml:SubjectConfirmationData InResponseTo="abc"/>
</saml:SubjectConfirmation>
</saml:Subject>
<saml:AuthnStatement AuthnInstant="2008-11-21T17:13:42.899Z">
<saml:AuthnContext>
<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef>
</saml:AuthnContext>
</saml:AuthnStatement>
</saml:Assertion>
</samlp:Response>
所以,我的问题是:
这是有效的 SAML 交互吗?
可以简化请求或响应 XML 吗?
我应该在回复中的哪个位置填写主题的电子邮件地址?
我真的很感谢你的帮助。非常感谢!
-摩根