Невозможно создать правильную подпись для ответа SAML - PullRequest
3 голосов
/ 18 марта 2020

Я использую библиотеку go -saml в нашем проекте, чтобы включить единый вход, в котором поставщиком услуг будет Salesforce, а поставщиком удостоверений будет код Golang. Код Golang сначала проверит пользователя, затем создаст ответ SAML, чтобы позволить пользователю войти в систему Salesforce. Я новичок в Golang и после Создание ответа SAML (если действует как IdP) этой библиотеки. Итак, пока я могу создать ответ SAML, используя его, но столкнулся с некоторыми трудностями при настройке его в соответствии с требованием.

  1. Первая проблема, с которой я столкнулся, это добавить AudienceRestriction в блоке Условия , как показано ниже: -

<saml:Conditions NotBefore="2020-03-15T16:33:16.23103491Z" NotOnOrAfter="2020-03-15T16:43:16.23104017Z"> <saml:AudienceRestriction> <saml:Audience>https://saml.salesforce.com</saml:Audience> </saml:AudienceRestriction> </saml:Conditions>

Я пытался добавить его как показано ниже в коде, но кажется AudienceRestrictions не определено в Условиях объект.

authnResponse := saml.NewSignedResponse() authnResponse.Conditions.AudienceRestrictions = "https://saml.salesforce.com"

Я не нахожу ни одного способ добавить вышеуказанный блок в блок Условия, который является обязательным для Salesforce. Пожалуйста, предложите мне какой-нибудь способ сделать это.

Я также должен добавить AuthnStatement ниже блока условий, как показано ниже: -

<saml:AuthnStatement AuthnInstant="2020-03-01T11:28:31.396Z"> <saml:AuthnContext> <saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified</saml:AuthnContextClassRef> </saml:AuthnContext> </saml:AuthnStatement>

Даже после добавления вышеупомянутых блоков в ответ SAML вручную, я получаю приведенную ниже ошибку при проверке ответа SAML с помощью средства проверки SAML Salesforce

Проверка подписи ... Is ответ подписан? true
Утверждение подписано? false
Ссылка в подписи ответа действительна
Правильный ли сертификат предоставлен в keyinfo? true

Проблемы с подписью или сертификатом
Недопустимая подпись в ответе

Я сгенерировал ключ Publi c (самозаверяющий сертификат .pem) и Закрытый ключ После этого я загрузил ключ publi c в Salesforce и использовал закрытые ключи и ключи publi c внутри кода для генерации ответа SAML. Я понятия не имею, почему я получаю Signature Invalid error. Пожалуйста, дайте мне знать, если у вас есть какие-либо предложения для меня.

В случае, если вы хотите проверить мой Golang код - https://play.golang.org/p/U9dXZblTHG1

1 Ответ

3 голосов
/ 23 марта 2020
  1. Аудитория может быть добавлена ​​с помощью функции :
authnResponse := saml.NewSignedResponse()
authnResponse.AddAudienceRestriction("https://saml.salesforce.com")
Контекст аутентификации может быть добавлен через другую функцию :
authnContext := "urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified"
sessionIndex := "session_1"
authnResponse.AddAuthnStatement(authnContext,sessionIndex)

В качестве рекомендации попробуйте более зрелую, устоявшуюся библиотеку, такую ​​как OpenSAML или simpleSAML php, для создать свой ответ SAML. Если это работает, но go -saml - нет, то у вас есть кое-что для go для ваших следующих шагов. С другой стороны, если утверждение, которое вы генерируете с помощью другого метода, также не выполняется, то, скорее всего, проблема связана с тем, что вы делаете с ключами или содержимым подтверждения, а не с библиотекой.

...