我的任务是设计一个非常简单的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吗?
我应该在回复的哪个位置放置主题的电子邮件地址?
我非常感谢你的帮助。非常感谢!
-摩根