Не удалось создать правильную подпись для ответа SAML

Я использую go- saml в нашем проекте, чтобы включить систему единого входа, в которой поставщиком услуг будет Salesforce, а поставщиком удостоверений будет код Golang. Код Golang сначала проверит пользователя, а затем создаст ответ SAML, чтобы позволить пользователю войти в систему Salesforce. Я новичок в Golang и слежу за Созданием ответа SAML (если действует в качестве поставщика удостоверений) этой библиотеки. Итак, я могу создать ответ 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 не определено в объекте Conditions.

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

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

  1. Я также должен добавить 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>

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

Проверка подписи… Подписан ли ответ? true
Подписано ли утверждение? false
Ссылка в подписи ответа действительна
Верен ли сертификат в ключевой информации? истинный

Проблемы с подписью или сертификатом
Подпись в ответе недействительна

Я сгенерировал открытый ключ (самоподписанный сертификат .pem) и закрытый ключ. После этого я загрузил открытый ключ в Salesforce и использовал закрытый и открытый ключи внутри кода для создания ответа SAML. Я понятия не имею, почему я получаю сообщение об ошибке Неверная подпись. Пожалуйста, дайте мне знать, если у вас есть какие-либо предложения для меня.

См. также:  Недетерминированное поведение для обучения нейронной сети на GPU, реализованное в PyTorch, и с фиксированным случайным начальным числом

Если вы хотите проверить мой код Golang — https://play.golang.org/p/U9dXZblTHG1< /а>

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

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

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: