В случае SAML - безопасность на уровне сообщений (т. Е. Сам XML подписывается, а иногда и шифруется), потому что в обмене участвуют стороны, которые не общаются напрямую. SSL / TLS предназначен для обеспечения безопасности на транспортном уровне. Он используется только между двумя сторонами, осуществляющими непосредственную связь, и только на время этой связи.
В зависимости от того, какую привязку SAML вы используете, диалоговое окно может выглядеть следующим образом (например, по линиям Shibboleth ):
- Браузер пользователя подключается к поставщику услуг (SP)
- SP предоставляет пользователю запрос SAML, не обязательно видимый, но скрытый в форме или аналоге.
- Браузер пользователя (при прямом подключении к IdP) отправляет запрос SAML в IdP.
- Пользователь аутентифицируется с ним и получает ответ SAML.
- Браузер пользователя отправляет этот ответ SAML на SP.
В этом сценарии не существует прямого соединения SSL / TLS между SP и IdP, хотя все 3 стороны участвуют. (Некоторые варианты включают внутреннюю связь между SP и IdP для атрибутов, но это другая проблема.)
- Соединение SSL / TLS было бы недостаточно для IdP, чтобы узнать, что запрос SAML поступил от SP, для которого ему разрешено аутентифицировать и разблокировать атрибут, поскольку соединение с IdP происходит из браузера пользователя, а не из Сама ИП. По этой причине SP должен подписать запрос SAML сообщение , прежде чем передать его в браузер пользователя.
- Соединение SSL / TLS было бы недостаточно для того, чтобы SP знал, что ответ SAML получен от IdP, которому он доверяет. Опять же, именно поэтому сам ответ SAML также подписан.
То, что относится к подписанию, также применимо к шифрованию, если промежуточная сторона, то есть пользователь, не должна видеть, что находится в сообщении SAML, и / или если соединение между пользователем и SP или IdP не закончено. SSL / TLS (обычно это должен быть протокол HTTPS).