Вам не нужен субъект в запросе - глядя на спецификации, я думаю, что это может быть так просто:
<?xml version="1.0" encoding="UTF-8"?>
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
ID="abc" Version="2.0" IssueInstant="1970-01-01T00:00:00.000Z"
</samlp:AuthnRequest>
Пропуск всех необязательных элементов и атрибутов (Issuer, NameIDPolicy, AssertionConsumerServiceURL и т. Д.) Означает, что ваш поставщик удостоверений и поставщик услуг согласовали их заранее, поэтому их не нужно указывать в AuthnRequest. Если вы контролируете обе стороны и абсолютно уверены, что никогда не добавите другого провайдера в список, тогда это совершенно законный запрос SAML. Это означает «аутентифицировать пользователя, который представляет это через механизм, который мы согласовали».
Глядя на ответ, я думаю, что это минимальный случай:
<?xml version="1.0" encoding="UTF-8"?>
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
ID="123" InResponseTo="abc" 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:1.1:nameid-format:emailAddress">
user@example.com
</saml:NameID>
</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>
Вы можете отправить адрес электронной почты пользователя в качестве NameID, и AuthnStatement просто передает тот факт, что провайдер идентификации аутентифицировал пользователя в данный момент с помощью данного механизма. Опять же, это зачеркнуто - мы опускаем такие атрибуты и элементы, как Destination и SubjectConfirmationMethod, так как они излишни для варианта использования.
Итак, в этом ответе говорится: «Это user@example.com; он вошел в систему с паролем через защищенный транспорт (SSL / TLS) в 17:13:42 21.11.2008».
Вы должны взглянуть на спецификацию профилей SAML 2.0 для точного механизма их передачи туда и обратно. AuthnRequest обычно сжимается, кодируется и передается в качестве параметра URL-адреса в GET, тогда как самый простой способ вернуть ответ - через привязку POST - вернуть HTML-страницу с формой, целью которой является поставщик услуг, и которая отправляется в время загрузки страницы с помощью некоторого JavaScript.