Эта библиотека представляется простой SAML
библиотекой для Go, которая заботится о генерации SAML
Response
, а также о том, что Response
.
. Я также видел, что это было сделано с использованием «шаблонов», где обработка SAML
фактически не выполнялась. Подготовленный блок текста с заполнителями был открыт, заполнители заменены требуемым текстом и отправлен ответ.
saml1p:Response
может быть шаблоном с IssueInstant
и ResponseID
, созданными во время выполнения. например, псевдокод будет выглядеть следующим образом:
String samlTemplate = loadSAMLTemplate()
.gsub("__IssueInstant__", "2020-02-26T17:32:05.200Z")
.gsub("__ResponseID__", "9421878f98")
.gsub( ... and so on ...)
это можно сделать таким образом, если не идеально, и это работает, только если у вас есть только один Assertion
.
. Вы бы использовали Приведенный выше шаблон и замените заменяемые части заполнителями, например,
<saml1p:Response
xmlns:saml1p="urn:oasis:names:tc:SAML:1.0:protocol"
IssueInstant="__IssueInstant__"
MajorVersion="1"
MinorVersion="1"
Recipient="https://im--partial.my.salesforce.com"
ResponseID="__ResponseID__">
для создания XML
SAML
Response
. У вас будут заполнители для AssertionID
et c. Все, что должно быть уникальным для SAML
Response
, будет нуждаться в заполнителе, содержимое которого будет заменено во время выполнения.
Затем вам нужно будет подписать Response
. Вы не можете сделать это, заменив вещи. Вы можете сделать это только путем цифровой подписи, используя XML Подпись. Вы можете использовать эту библиотеку , чтобы сделать это. Он по-прежнему кодирует Response
, но вам нужно работать только с подписью, а не со всем процессом SAML
.
Таким образом, рабочий процесс будет:
- Создать повторно
SAML
Response
как текстовый шаблон с PlaceHolders для каждого заменяемого текста. - Загрузите шаблон, замените все биты, которые необходимо заменить. Это ваша
SAML
Response
. - Используйте библиотеку подписи XML для подписи
SAML
Response
. Это то, что вы отправляете в ИП.