# #go #saml-2.0 #idp #trust
Вопрос:
Прочитав много документации по протоколу SAML, я все еще не понимаю, как работает доверие между IDP и SP.
Я знаю, что и IDP, и SP должны иметь файл «Метаданных», содержащий сертификат x509. Чтобы установить это доверие, IDP и SP должны обмениваться этими файлами метаданных.
Но я не понимаю, как технически это работает. Согласно моим исследованиям, многие ВПЛ предлагают сделать это графическим способом, загрузив файлы метаданных. Моя конечная цель-внедрить протокол SAML в Голанге. Вот почему я хотел бы понять, как это работает.
Заранее спасибо!
Комментарии:
1. Это просто стандартная PKI. IdP подписывает сообщение с помощью закрытого ключа, SP проверяет подпись с помощью открытого ключа или наоборот.
2. Спасибо вам за ваш быстрый ответ. Значит, в конце концов, реального обмена метаданными не происходит?
3. Да, есть. Именно так происходит обмен открытыми ключами (наряду с другими настройками). Страница Википедии -хорошая отправная точка, но имейте в виду, что это БОЛЬШОЙ протокол. Я надеюсь, что в golang уже есть хорошая канонизация XML и библиотеки XML-подписей, потому что в противном случае вас ждет удовольствие.
4. Написав несколько частичных реализаций SAML ранее, я бы счел полную, безопасную реализацию с нуля многолетним проектом, даже если не учитывать XML/криптографию.
5. Я уже прочитал документацию Википедии, но ничего не нашел об обмене метаданными. Но спасибо, я посмотрю точнее. На самом деле библиотеки SAML уже существуют в голанге, поэтому я думаю, что буду использовать их в качестве основы. Но я ничего не нашел о доверии между ВПЛ и ИП. Поэтому я хотел бы попробовать реализовать это сам
Ответ №1:
Когда вы впервые настраиваете интеграцию между SP и IdP, они обмениваются XMLS метаданных. ИП получает один от ВПЛ, а ВПЛ получает один от ИП.
Его можно обменять многими способами, например, по электронной почте, или позволить ИП загрузить его в форму, или предоставить ваши метаданные на странице вашего сервиса. Важно то, что ИП и ВПЛ получают друг от друга данные matadata и верят, что получили их от правильного человека.
Метаданные содержат множество вещей, таких как конечные точки и поддерживаемые службы, а также открытые ключи. Эти ключи используются для подписи сообщений между ними.
Когда SP отправляет сообщения IdP, SP подписывается своим закрытым ключом, а IdP проверяет с помощью открытого ключа в метаданных SP. И наоборот, когда IdP отправляет что-либо, он подписывает это своим закрытым ключом, и SP проверяет это с помощью открытого ключа в метаданных IdP. Таким образом, каждый может быть уверен, что сообщение пришло от ожидаемого отправителя.
У меня есть еще одна деталь в сообщении в блоге, которое я написал, если вам это нужно.
Я также согласен с @Robby Cornelissen. SAML-это не просто, вы должны сделать это правильно, и последствия могут быть серьезными.
Комментарии:
1. Привет, спасибо за ваш ответ, но это не полностью отвечает на мой вопрос: допустим, я разрабатываю ИП и ВПЛ в Голанге. Я создаю для них обоих файл метаданных, которым обмениваюсь вручную. Как я могу, технически говоря, создать доверие? Есть ли какой-то особый запрос?
2. Доверие устанавливается путем обмена файлами метаданных и настройки IdP и SP для их использования. Когда вы используете их в последующем общении, вы будете использовать ключи в метаданных другого, чтобы убедиться, что сообщения пришли от них. Вы спрашиваете, есть ли специальный запрос на обмен метаданными?
3. Хорошо, спасибо, я начинаю понимать. Я уже знаю, как можно обмениваться метаданными. Мой настоящий вопрос был таков : я хочу разработать SP в Голанге. Для этого я использую любого ВПЛ. Поэтому я получу файл его метаданных. Как только у меня будут метаданные моего ИП и метаданные ВПЛ, которые я хочу использовать локально, как я могу конкретно установить доверие?
4. Доверие обычно устанавливается вами, если вы уверены, что получили метаданные IdP из правильного источника. Чтобы в дальнейшем доверять тому, что метаданные поступают из правильного источника, метаданные могут быть подписаны, но затем из источника вам нужно доверять используемому ключу