Существует ли библиотека SAML для языка Go?

Я вижу, что goauth и go-oauth Библиотеки OAuth были написаны для Go Programming Language, но пара часов поиска в Интернете ничего не дали для SAML.

Я хотел бы использовать Go для реализации поддержки единого входа с помощью SAML для веб-сервиса, но без библиотеки SAML для Go, похоже, мне придется «обернуть» логику SAML в отдельный сервис, реализованный на другом языке.

Кто-нибудь знает о дружественной к Go библиотеке SAML или, может быть, о каком-нибудь трюке для использования библиотеки Java, C или PHP из программы Go?


person Peter    schedule 07.09.2012    source источник
comment
Вы можете очень легко обернуть библиотеку C в Go, используя CGO. Подробности здесь: golang.org/doc/articles/c_go_cgo.html   -  person Jeremy Wall    schedule 09.09.2012
comment
Спасибо за ссылку! Приятно знать, что у меня по крайней мере есть возможность написать оболочку Go, например, для Lasso. Конечно, было бы неплохо, если бы Google предоставил библиотеку SAML для своего языка и избавил меня от хлопот.   -  person Peter    schedule 10.09.2012
comment
Если ваш вариант использования SAML достаточно прост, вы можете довольно легко реализовать его самостоятельно без поддержки библиотек. Вот пример: sanatgersappa.blogspot.com /2012/11/   -  person voidlogic    schedule 04.01.2013
comment
@voidlogic - это вряд ли пригодная для использования реализация saml. Это примерно эквивалентно базовой аутентификации по паролю, и большинство систем не допускают такого утверждения.   -  person JimB    schedule 10.01.2013


Ответы (3)


Я использовал gosaml, и он работает довольно хорошо, но есть также go-saml от роботов и карандашей.

Спустя год я подумал, что было бы хорошо ответить на этот вопрос, потому что было бы неплохо иметь здесь какой-то ответ для людей, которые ищут библиотеки SAML для Go.

person apriendeau    schedule 07.09.2015
comment
Спасибо за ссылки. Для моих целей проект go-saml выглядит более полезным, так как для реализации SAML SSO я потребуется сгенерировать SAML authRequests и проверить SAML authResponses. - person Peter; 08.09.2015
comment
Сладкий. Я рад, что смог помочь в каком-то смысле. Я использовал оба, и оба довольно приличные. С валидацией всегда интересно иметь дело. - person apriendeau; 08.09.2015

Я не видел реализации SAML для Go, но вы можете использовать сервер, который уже реализует его перед вашим приложением.

Одной из наиболее поддерживаемых реализаций SAML является Shibboleth. Модуль apache является наиболее зрелым и, вероятно, самым простым в использовании методом, поскольку вы просто размещаете свое приложение за обратным прокси-сервером в apache. Существует также аутентификатор fastcgi, который использует тот же бэкэнд, но я не могу говорить о простоте его реализации.

Если вам просто нужен сервис-провайдер, самая простая привязка SAML — это HTTP-POST-SimpleSign. Я сделал проверочную реализацию на python, чтобы попытаться продемонстрировать самый простой SP, который я мог . Я не претендую на надежность этого модуля, но вы можете видеть, что это можно сделать с помощью небольшого количества кода. Предполагается, что поставщики удостоверений, с которыми вы работаете, поддерживают эту привязку. И, как всегда, будьте осторожны при развертывании любого пользовательского кода, связанного с безопасностью.

person JimB    schedule 10.01.2013
comment
+1 за ссылку на доказательство реализации концепции. Похоже, что ваша служба проверки утверждений (прикрепленная к относительному URL-адресу /SSO) на самом деле ничего не делает, кроме как печатает атрибуты утверждения безопасности authResponse — по крайней мере, вы должны проверять подпись IdP, но Я понимаю, что вы считаете, что для создания authRequest и перехвата authResponse для дальнейшей обработки (и дополнительной проверки) не требуется много времени. Верно, но даже если меня интересует только вход в систему SSO с привязками POST, при реализации с нуля можно ошибиться во многих деталях. - person Peter; 11.01.2013
comment
@Peter - согласен, и поэтому я никогда не продвигал эту маленькую библиотеку дальше. Я написал это некоторое время назад, но я точно помню, что он проверял подпись IdP (через M2Crypto). Вам нужен сертификат IdP в pem, а saml.py:118 выдает SAML_Error в случае сбоя подписи. Я еще не проверял, что влечет за собой базовая подпись/проверка в Go. - person JimB; 11.01.2013
comment
На самом деле, я хочу, чтобы мой ACS делал намного больше, чем просто проверял подпись IdP, и одно из преимуществ использования готовой библиотеки (например, SimpleSAMLphp, который я успешно использовал ранее для реализации логики SP), заключается в том, что кто-то уже создал механизм для обработки метаданных доверительных отношений. Я также знаю, что я мог бы создать обратный прокси, чтобы скрыть детали реализации федеративного удостоверения от остальной части моего приложения — дело именно в том, что я хотел бы использовать Go для реализации прокси. - person Peter; 12.01.2013
comment
Ах, да - федерация требует гораздо больше работы. В моем примере предполагается, что обмен сертификатами осуществляется через безопасный побочный канал, что все еще является очень распространенным вариантом использования. Хотя мой отказ от ответственности для всех, кто читает, по-прежнему остается не используйте этот код в рабочей среде (или, по крайней мере, будьте очень осторожны и проверяйте все). - person JimB; 15.01.2013

Если вы хотите проверять ответы SAML от AWS IdP в конечной точке потребителя утверждений, вам лучше использовать https://github.com/crewjam/saml, так как он не использует системную библиотеку libxmlsec1.

По какой-то причине libxmlsec1 не проверяет ответы SAML от некоторых IdP (AWS) успешно (предположительно из-за некоторых неопределенных пространств имен).

person Anton Litvinov    schedule 02.10.2019