我有一个网络应用,我想让我的用户通过SAML登录。我想允许他们通过提供IdP登录URL,注销URL,证书等来配置他们的身份提供者,或者只是一个元数据网址。
此外,我的一些客户希望设置和使用他们自己的内部身份提供商。
我的问题是,一旦交换密钥,验证签名等,我怎么能相信身份提供商是安全的?当SAMLResponse进入时(特别是通过IdP发起的SSO),我怎么知道NameID元素中的电子邮件地址与想要登录的合法用户有关?什么阻止他们发送我自己的电子邮件地址以网站管理员身份登录?
我已经阅读了很多SAML 2.0规范,这里有答案,以及博客文章,但我还没有看到这个问题的具体解决方案。
答案 0 :(得分:0)
您无法更改SAML令牌,因为它已签名。
最终,您需要检查所有这些IDP。
出于这个原因,联邦是一个手动过程。
如果你联邦,你信任。
答案 1 :(得分:0)
在提出问题之前,我认为明确SSO身份验证流程非常重要。
对于SAML 2.0,涉及两方,即身份提供商(IdP)和服务提供商(SP)。他们使用协议端点和证书进行反向通道(服务器到服务器)通信。
话虽如此,您可以使用各种网络层流程来确保通信过程的安全,并且不会发生man-in-the-middle
攻击。
然后回到原来的问题,我认为它包含以下两个主题,如果正确的话:
通过提供IdP登录URL,注销URL,证书等,或仅提供元数据网址来配置其身份提供商。
这些都是SAML 2.0所需的元数据,因此您可以自己配置它,或者信任您的合作伙伴以您的方式执行(in your way
我的意思是不同的SAML 2.0联合服务器有自己的元数据集,但是一般来说它们应该是一样的。)
交换密钥,验证签名等后,我如何相信身份提供商是安全的?当SAMLResponse进入时(特别是通过IdP发起的SSO),我怎么知道NameID元素中的电子邮件地址与想要登录的合法用户有关?什么阻止他们发送我自己的电子邮件地址以网站管理员身份登录?
IdP必须安全,好像他们被黑客攻击(社会工程),他们可以登录您的应用程序。
SAML属性映射,除了SAML_SUBJECT之外,还有其他属性可用于确定SAML_SUBJECT的角色(如果我们可以讨论provisioning
),或者您可以预定义角色映射到该用户(SAML_SUBJECT
)以确定角色。
由于SAML仅用于身份验证并交换用户的可信信息,因此SP应用程序需要如何使用双方同意的SAML有效负载中的信息。
关于由@nzpcmad评论的令牌操作,我认为这是可能的,当PingFederate通过OpenToken适配器与SP应用程序对话时,这在PingFederate中称为合同履行。 Okta,OAuth0都有类似的概念。
希望这能回答你的问题。