Как написать веб-сервис Java для удаленного входа в систему? - PullRequest
6 голосов
/ 06 декабря 2008

У меня есть два приложения. Мне нужно выполнить единый вход из приложения a в приложение b.

Я думаю об использовании веб-сервиса. Интересно, как мне поступить с таким подходом?

Может кто-нибудь посоветовать?

Ответы [ 6 ]

3 голосов
/ 08 декабря 2008

Предполагая, что это веб-приложения - вы должны реализовать некоторую модель модели общего доверия между приложениями.

Ни при каких обстоятельствах вы не должны писать свои собственные. Это слишком легко испортить, и есть множество существующих (как открытых, так и коммерческих) на выбор.

Вот следующие варианты: 1 - Если все работают под управлением Windows - вы можете просто использовать собственную аутентификацию Windows (она же SPNEGO) 2 - Вы можете реализовать какой-либо тип системы единого входа. Популярные системы - это CAS, Oracle Access Manager, CA SiteMinder, Sun SSO и IBM Tivoli Access Manager. В то время как CAS является открытым исходным кодом, другие также позволят вам реализовать авторизацию, в то время как CAS выполняет только аутентификацию.

Наконец - убедитесь, что любой выбранный вами вариант - он интегрируется с собственной структурой аутентификации и авторизации вашего языка. В Java это будет JAAS. В .NET это была бы структура безопасности .NET. Для PHP / Perl - вы можете использовать модули Apache. Преимущество состоит в том, что вам не нужно становиться экспертом по безопасности, и это облегчит использование внешних систем для аутентификации и авторизации без необходимости перекодировать ваше приложение.

2 голосов
/ 09 декабря 2008

Вы можете использовать схему аутентификации с открытым ключом.

Создайте пару ключей с открытым и закрытым ключом (используя Java keytool, GNU GPG или похожий инструмент). Используйте закрытый ключ, чтобы подписать часть информации (например, имя пользователя) в приложении A и создать ссылку на приложение B, которая доступна из приложения A и содержит подписанные данные. Затем приложение B может войти в систему пользователя после проверки с помощью открытого ключа, что запрос действительно поступил из приложения A (которое оно должно иметь, если оно может расшифровать строку).

Вы, конечно, могли бы создать противоположную пару ключей для навигации и другим способом, или вы могли бы просто использовать открытый ключ и хранить его в секрете (фактически делая его разделяемой секретной системой).

Если пользователь пытается получить доступ к приложению B напрямую, вы также можете перенаправить его в приложение A с параметром, который говорит, что он пришел из приложения B (или выполнить проверку реферера). Если он уже вошел в приложение A, создайте ссылку с подписанными данными и перенаправьте на нее, в противном случае предоставьте ему экран входа в систему и перенаправьте после входа в систему.

Надеюсь, это поможет!

0 голосов
/ 06 декабря 2008

На земле Oracle я знаю, что существует концепция доверенного приложения. По сути, если у вас есть контроль над обоими приложениями, вы можете настроить его так:

Приложение A отправляет Приложение B, 1) имя пользователя и пароль Приложения A и 2) имя пользователя текущего пользователя. Поскольку B знает и доверяет Приложению A, ему не нужно проверять учетные данные пользователя, поскольку он знает, что приложение A уже сделало это для него.

Я предполагаю, что если у вас есть специальное приложение B, вы можете сделать что-то подобное. Если ваша реализация SSO поддерживает это, то вам, вероятно, не нужно ничего делать, кроме разработки веб-сервисов.

Удачи

0 голосов
/ 06 декабря 2008

Вы используете сервер приложений? Какая среда для ваших приложений?

Существует стандарт распространения идентификаторов с использованием веб-сервисов, который называется Web Service Security UsernameToken Profile. Вот краткий обзор . Вы можете отправить имя пользователя / пароль или различные токены, такие как сертификат X.509 или подтверждение SAML. Некоторые стеки веб-служб серверов приложений будут обрабатывать профиль WSS UsernameToken, JBoss, Websphere и WebLogic. В противном случае код веб-службы должен с этим справиться. Этот подход может быть слишком громоздким в зависимости от вашей среды.

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

0 голосов
/ 06 декабря 2008

Если приложения размещены на одном и том же сервере, вы можете настроить его на использование единого входа. Например, в Tomcat это достигается с помощью Valve .

Если приложения находятся в разных средах, тогда рекомендуется использовать защищенную веб-службу. Вы можете, например, создать пару открытый - закрытый ключ и иметь приложение b (сервер), аутентифицирующее приложение a (клиент) на сертификате клиента. Это означает, что приложение a будет подписывать все запросы к приложению b с помощью сертификата клиента. Для получения полного решения требуются дополнительные сведения об архитектуре.

0 голосов
/ 06 декабря 2008

Вы можете использовать существующий продукт с открытым исходным кодом, CAS и просто внедрить его вместо разработки своего собственного. Таким образом, вы сможете интегрироваться с другими приложениями, поддерживающими тот же протокол. Даже если вы решите реализовать свой собственный код вместо использования своего кода, на веб-сайте будет представлено множество идей, которые вам полезно рассмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...