Междоменный единый вход с помощью Azure, ACS, Sharepoint 2010, сайта MVC и WebService

У меня есть сайт SharePoint 2010, настроенный для входа в систему с помощью ACS. И ACS настроен на использование моего собственного поставщика удостоверений. У меня также есть веб-приложение MVC, которое также поддерживает утверждения и использует ACS для аутентификации. Идея состоит в том, чтобы предоставить сертификаты сервисов из sharepoint на сайт MVC, используя созданный мной веб-сервис.

Вот рисунок идеи:

Моя идея заключалась в том, что как только вы войдете на сайт MVC, вы можете использовать этот токен SAML (идентификатор) для входа в SharePoint (я просто передаю токен SAML веб-службе, и служба пытается войти в SharePoint с этим токеном. ). Я надеялся, поскольку я настроил Проверяющие стороны (сайт MVC, SharePoint) в ACS на использование одного и того же сертификата для подписи, он примет токен, даже если он был из другой области. Но это не так. Поэтому мне было интересно, как моя веб-служба может выдавать себя за пользователя с имеющимися у меня утверждениями. Я проводил бесконечные исследования и совершенно убежден, что это просто невозможно. Настоящий вопрос заключается в том, есть ли у SharePoint способ доверять токенам, которые я получаю на моем сайте MVC, без создания всей STS и наличия у SharePoint доверительных отношений с этим. Любая помощь и идеи будут оценены.


person Ruud    schedule 13.09.2012    source источник


Ответы (1)


Если вы доверяете токенам, которые были созданы для MVC или SharePoint, тогда ваш веб-сервис является частью этой «области», поэтому можно добавить эту область как действительную. Проверка uri аудитории может быть изменена из конфигурации или кода. Вы используете WCF? Вы используете WIF с WCF?

<audienceUris>
   <add value="your:sharepoint-and-mvc:realm" />
   <add value="http://webservice" />
</audienceUris>

изменить: прочитав ваш вопрос еще раз и сделанное вами разъяснение, у вас возникнут проблемы с SharePoint, поскольку у них есть STS, который выполнит некоторые преобразования исходного токена ACS и снова подпишет его своими собственными ключами. Это означает, что у вас нет доступа к исходному токену ACS. Я вижу здесь два варианта:

  • Создайте свой собственный токен перед использованием службы (вы можете использовать SimpleWebTokens или JsonWebTokens, которые проще реализовать, и общий симметричный ключ).
  • Настройте свою службу так, чтобы она доверяла токенам SAML, подписанным ACS или ключом SharePoint, а также URI аудитории.

Поскольку это служба REST, я бы выбрал вариант 1, преобразовал исходный токен в веб-токен JSON, ушел в отставку с вашим собственным ключом и прикрепил токен к заголовку авторизации.

Здесь у вас есть реализация JsonWebTokens (JWT) http://nuget.org/packages/JWT

Вот реализация SimpleWebTokens http://nuget.org/packages/netfx-Microsoft.IdentityModel.Swt

Вы можете использовать JWT также с асимметричным шифрованием с сертификатами x509 (хотя это не реализовано в этом пакете)

person woloski    schedule 13.09.2012
comment
Я использую WIF, но только на моем сайте MVC. У меня еще не реализована какая-либо система безопасности в моей службе отдыха, я полагаю, я мог бы создать эту службу, чтобы пользователю также нужно было подключиться к ней и попытаться получить доверенный токен SharePoint, настроив эту службу на доверие SharePoint auditUris, а затем просто запросите этот токен у ACS. Я думаю, вы это имеете в виду, верно? - person Ruud; 17.09.2012
comment
Что ж, я нашел вашу идею интересной, но одна из проблем в моем сценарии заключается в том, что я должен использовать стандартный SharePoint. Тем не менее, мне удалось заставить его работать, теперь я перенаправляю свой токен из ACS в службу вышибалы, которая может либо перенаправить обратно на SharePoint, либо на мой сайт MVC. Это означает, что я могу использовать один токен для обеих проверяющих сторон (фактически делая его только одной проверяющей стороной). Теперь я могу извлечь маркер начальной загрузки на моем сайте MVC и передать его своей службе, которая может передать его в SharePoint. Моя единственная реальная проблема с этим заключается в том, что я не знаю, какие последствия для безопасности это имеет. - person Ruud; 03.10.2012
comment
(комментарий был слишком длинным) Это вроде как немного взломано, но я действительно не могу найти в нем что-то не так, поэтому мне было интересно, что вы думаете об этом - person Ruud; 03.10.2012
comment
Я не следил. Как служба вышибалы знает, куда перенаправить? Можете ли вы описать всю последовательность http? - person woloski; 03.10.2012
comment
У меня есть собственная страница HRD (Home Realm Discovery). и используя это, я могу создать свой собственный URL-адрес возврата, который также позволяет передавать различные переменные в мой URL-адрес возврата. Вот так моя служба вышибалы тоже знает, куда перенаправить. так вот что происходит: l. Пользователь выбирает IP-адрес на настраиваемой странице HDR, 2. IP-адрес для входа пользователя в систему, 3. Перенаправление в ACS с помощью токена (с настраиваемым URL-адресом возврата с установленной переменной), 4. ACS создает токен и перенаправляет на службу вышибалы, 5. Служба вышибалы извлекает загрузочный токен и в зависимости от переменной перенаправляет пользователя на правильный сайт с токеном. - person Ruud; 08.10.2012
comment
это нормально, если вы сохраните все по https. Но я все еще не понимаю, как получить исходный токен из SharePoint? Есть ли у вышибалы какой-то веб-сервис? О, у вас есть какой-то http-модуль на SP, который извлекает его из строки запроса? - person woloski; 08.10.2012
comment
служба вышибалы - это webapi, настроенный с помощью WIF. Он получает токен от ACS. Затем он снова извлекает этот токен и отправляет его так же, как и ACS (с перенаправлением и токеном в теле), либо в SharePoint / _trust / для входа в SharePoint, либо на сайт mvc. Поэтому я не использую токен, полученный от SharePoint, поскольку SharePoint имеет собственную службу STS и выполняет некоторые преобразования, которые делают этот токен бесполезным. Я просто продолжаю повторно использовать токен ACS, которому доверяют и сайт MVC, и SharePoint. - person Ruud; 09.10.2012
comment
Хм, я до сих пор не понимаю, чем это отличается от отсутствия вышибалы. Как вы вызываете веб-сервис из SharePoint? Как получить исходный токен из SharePoint? - person woloski; 09.10.2012
comment
Я не использую повторно токен SharePoint, когда я вызываю службу SharePoint, я просто использую токен, полученный от ACS, для входа в SharePoint, получения файла cookie oauth и использования его для выполнения вызовов службы в SharePoint. - person Ruud; 16.10.2012