Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAML2.0响应验证_Saml_Saml 2.0_Okta_Okta Api - Fatal编程技术网

SAML2.0响应验证

SAML2.0响应验证,saml,saml-2.0,okta,okta-api,Saml,Saml 2.0,Okta,Okta Api,将我的一个应用程序与SAML2.0单点登录集成。正在为此使用Okta提供程序。在okta中成功验证后,我收到了base64编码的“SAML响应令牌”,并重定向回我的应用程序。在这个令牌中,我看到了我需要的所有用户详细信息,但我的问题来了。我是否需要进一步验证该响应,还是应该相信我收到的?考虑到这个令牌也包含signarure 我的安全想法是再次联系Okta,并验证这是否真的是Okta发布的。不确定这是否可能 使用NodeJS进行验证。如果您不想在后端执行正确的令牌验证(不要怪您,这很痛苦),那么

将我的一个应用程序与SAML2.0单点登录集成。正在为此使用Okta提供程序。在okta中成功验证后,我收到了base64编码的“SAML响应令牌”,并重定向回我的应用程序。在这个令牌中,我看到了我需要的所有用户详细信息,但我的问题来了。我是否需要进一步验证该响应,还是应该相信我收到的?考虑到这个令牌也包含signarure

我的安全想法是再次联系Okta,并验证这是否真的是Okta发布的。不确定这是否可能


使用NodeJS进行验证。

如果您不想在后端执行正确的令牌验证(不要怪您,这很痛苦),那么切换到OIDC。这更适合于前端的身份验证和授权

但是,如果SAML响应被发送到后端并由后端处理,并且其他一些令牌被转发到应用程序,那么您应该评估该令牌的验证要求是什么


您的问题中不清楚的是我们所讨论的用户流中的位置,因此我的答案中的评论数。

如果您不想在后端执行正确的令牌验证(不要怪您,这很痛苦),那么切换到OIDC。这更适合于前端的身份验证和授权

但是,如果SAML响应被发送到后端并由后端处理,并且其他一些令牌被转发到应用程序,那么您应该评估该令牌的验证要求是什么

你的问题中不清楚的是,我们所说的用户流在哪里,因此,我的答案上的评论数。

如果SAML响应令牌指的是根据Web浏览器密码SSO配置文件发出的
samlp:response
,则响应包含断言,并且断言由身份提供者签名(此外,整个响应也可以签名)

始终验证响应签名是一项关键的安全要求。第4.1.4.3节中提到了这一点

原因如下:在Web浏览器SSO配置文件中,标识提供者在网页中返回令牌,该网页包含一个简单表单,其中包含
SAMLResponse
RelayState
字段,以及一段代码,这些代码只会将此表单自动发布到您的应用程序中。从技术上讲,这意味着令牌在短时间内由用户的web浏览器控制,这是令牌可以更改(或伪造)的地方

因此,协议安全性在很大程度上依赖于令牌的完整性,而令牌的完整性是通过加密签名实现的——它只是应用于SAML的一个普通的旧XMLDSig签名

作为令牌接收者,您的目标不仅是验证签名,而且还要检查签名的证书,并将其与您期望从可信提供者(或可信提供者的证书列表)获得的证书进行比较

跳过此步骤会使应用程序易受攻击:

  • 跳过验证意味着用户可以更改断言的令牌(添加/创建/删除)声明,签名验证将失败,但您可以跳过它

  • 跳过与已知证书的证书匹配意味着用户可以伪造自己的断言,使用虚拟证书对其进行签名,并将其呈现给您的应用程序。签名验证步骤将成功,但您不会意识到使用了伪证书对断言进行签名

如果SAML响应令牌是指根据Web浏览器SSO配置文件发出的
samlp:response
,则响应包含断言,且断言由身份提供者签名(此外,整个响应也可以签名)

始终验证响应签名是一项关键的安全要求。第4.1.4.3节中提到了这一点

原因如下:在Web浏览器SSO配置文件中,标识提供者在网页中返回令牌,该网页包含一个简单表单,其中包含
SAMLResponse
RelayState
字段,以及一段代码,这些代码只会将此表单自动发布到您的应用程序中。从技术上讲,这意味着令牌在短时间内由用户的web浏览器控制,这是令牌可以更改(或伪造)的地方

因此,协议安全性在很大程度上依赖于令牌的完整性,而令牌的完整性是通过加密签名实现的——它只是应用于SAML的一个普通的旧XMLDSig签名

作为令牌接收者,您的目标不仅是验证签名,而且还要检查签名的证书,并将其与您期望从可信提供者(或可信提供者的证书列表)获得的证书进行比较

跳过此步骤会使应用程序易受攻击:

  • 跳过验证意味着用户可以更改断言的令牌(添加/创建/删除)声明,签名验证将失败,但您可以跳过它

  • 跳过与已知证书的证书匹配意味着用户可以伪造自己的断言,使用虚拟证书对其进行签名,并将其呈现给您的应用程序。签名验证步骤将成功,但您不会意识到使用了伪证书对断言进行签名


我希望如此,但saml 2.0是必须的。您无法在前端安全地验证saml。如果没有后端进行验证,则无法信任它。OIDC规范要求验证Id令牌。差别不大。大多数情况下,OIDC客户端(依赖方)必须调用OIDC提供程序(“服务器到服务器通信”)从JWKS URI读取JWKS。许多SAML服务提供程序实现库已经为您进行了SAML响应验证。是的,但您不能将该验证放在前面