Небольшая статья про прикручиванию сервиса аутентификации и авторизации к Jboss Application Server на IBM JDK(Это не пошаговая инструкция, просто решение проблем с которыми я лично столкнулся. Установки отдельно JBoss и OpenDs не касаюсь)
Что понадобится
OpenSSO(https://opensso.dev.java.net/) — непосредственно сервис авторизации/аутонтификации
Jboss AS(http://www.jboss.org/jbossas/)- беcплатный опенсоурсный Application Server
OpenDs(http://www.opends.org/)- LDAP(в нашем случае будем использовать просто как бд учеток)
При использование JbossAS на IBM Jdk придется немного обработать напильником OpenSSO и JBoss-
1) В Jboss As надо в run.bat изменить параметры запуска ява машины, добавив туда
-DamCryptoDescriptor.provider=IBMJCE -DamKeyGenDescriptor.provider=IBMJCE
2) Если кроме OpenSSO на Jboss необходимо использовать другие сервисы нужно поиграться с сырцами, у openSSO.war в web-inf/lib есть opensso.jar, в нем есть FamClassLoader в котором нехорошие разработчики добавили
System.setProperty(«javax.xml.soap.MetaFactory», «com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl»);
System.setProperty(«javax.xml.soap.MessageFactory», «com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl»);
System.setProperty(«javax.xml.soap.SOAPConnectionFactory», «com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory»);
System.setProperty(«javax.xml.soap.SOAPFactory», «com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl»);
что немного все ломает) Надо закомментарить эти строки и пересобрать jar(Может есть другие методы решения, но к этому я пришел быстрее всего)
Нарушений в функционирование openSSO при этом не обнаружено.
3) В war архиве сервиса залезть в web-inf/classes найти там bootstrap.properties и в нем # configuration.dir=/opensso/AMConfig@REAL_PATH@.
расскоментарить и добавить туда абсолютный путь до места где будут хранится конфиги. Можно сделать и возможность обработки относительных путей, для этого надо опять залеть в сырцы, найти там com\sun\identity\setup\AMSetupServlet.java и поменять по желанию getPresetConfigDir()
Все, OpennSSO задеплоен, теперь о работе с ним(полный хелп docs.sun.com/app/docs/coll/1767.1?).
Запускается гуи через jbossHost:jbossPort/opensso
Прикручиваем Ldap сервер, это можно сделать либо при первом запуске openSSO либо во вкладке data store(немного про это blog.jboss-portal.org/2007/10/jboss-portal-with-opensso-and-opends.html)
Далее, у нас есть 2 метода авторизации- через jbossHost:jbossPort/opensso/identityservices?WSDL где все всем я думаю понятно, и через Rest(не забудьте запустить OpenDs) Пример rest запроса-
java.net.URL iurl = new java.net.URL(«localhost:8080/opensso/identity/authenticate»);
java.net.URLConnection connection = iurl.openConnection();
connection.setRequestProperty(«Content-Type», «application/x-www-form-urlencoded»);
// Send POST output.
connection.setRequestMethod(«POST»);
java.io.DataOutputStream printout = new java.io.DataOutputStream(connection.getOutputStream ());
String content = «username=» + java.net.URLEncoder.encode (username) +
"&password=" + java.net.URLEncoder.encode (password);
printout.writeBytes (content);
printout.flush (); printout.close ();
java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(
(java.io.InputStream) connection.getContent()));
out.println("
String line;
while ((line = reader.readLine()) != null) {
out.println(line + "
");
int index = line.indexOf(«token»);
if (index != -1) {
token = line.substring(9);
}
}
Почитать о Rest-
developers.sun.com/identity/reference/techart/id-svcs.html)
blogs.sun.com/indira/entry/rest_based_identity_services_in
В итоге получился бесплатный относительно надежный сервис авторизации, который уже можно прикручивать к чемулибо еще)
Куча информации по OpenSSO и связанному с ним blogs.sun.com/indira
Что понадобится
OpenSSO(https://opensso.dev.java.net/) — непосредственно сервис авторизации/аутонтификации
Jboss AS(http://www.jboss.org/jbossas/)- беcплатный опенсоурсный Application Server
OpenDs(http://www.opends.org/)- LDAP(в нашем случае будем использовать просто как бд учеток)
При использование JbossAS на IBM Jdk придется немного обработать напильником OpenSSO и JBoss-
1) В Jboss As надо в run.bat изменить параметры запуска ява машины, добавив туда
-DamCryptoDescriptor.provider=IBMJCE -DamKeyGenDescriptor.provider=IBMJCE
2) Если кроме OpenSSO на Jboss необходимо использовать другие сервисы нужно поиграться с сырцами, у openSSO.war в web-inf/lib есть opensso.jar, в нем есть FamClassLoader в котором нехорошие разработчики добавили
System.setProperty(«javax.xml.soap.MetaFactory», «com.sun.xml.messaging.saaj.soap.SAAJMetaFactoryImpl»);
System.setProperty(«javax.xml.soap.MessageFactory», «com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl»);
System.setProperty(«javax.xml.soap.SOAPConnectionFactory», «com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnectionFactory»);
System.setProperty(«javax.xml.soap.SOAPFactory», «com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl»);
что немного все ломает) Надо закомментарить эти строки и пересобрать jar(Может есть другие методы решения, но к этому я пришел быстрее всего)
Нарушений в функционирование openSSO при этом не обнаружено.
3) В war архиве сервиса залезть в web-inf/classes найти там bootstrap.properties и в нем # configuration.dir=/opensso/AMConfig@REAL_PATH@.
расскоментарить и добавить туда абсолютный путь до места где будут хранится конфиги. Можно сделать и возможность обработки относительных путей, для этого надо опять залеть в сырцы, найти там com\sun\identity\setup\AMSetupServlet.java и поменять по желанию getPresetConfigDir()
Все, OpennSSO задеплоен, теперь о работе с ним(полный хелп docs.sun.com/app/docs/coll/1767.1?).
Запускается гуи через jbossHost:jbossPort/opensso
Прикручиваем Ldap сервер, это можно сделать либо при первом запуске openSSO либо во вкладке data store(немного про это blog.jboss-portal.org/2007/10/jboss-portal-with-opensso-and-opends.html)
Далее, у нас есть 2 метода авторизации- через jbossHost:jbossPort/opensso/identityservices?WSDL где все всем я думаю понятно, и через Rest(не забудьте запустить OpenDs) Пример rest запроса-
java.net.URL iurl = new java.net.URL(«localhost:8080/opensso/identity/authenticate»);
java.net.URLConnection connection = iurl.openConnection();
connection.setRequestProperty(«Content-Type», «application/x-www-form-urlencoded»);
// Send POST output.
connection.setRequestMethod(«POST»);
java.io.DataOutputStream printout = new java.io.DataOutputStream(connection.getOutputStream ());
String content = «username=» + java.net.URLEncoder.encode (username) +
"&password=" + java.net.URLEncoder.encode (password);
printout.writeBytes (content);
printout.flush (); printout.close ();
java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(
(java.io.InputStream) connection.getContent()));
out.println("
Successful Authentication using REST
");String line;
while ((line = reader.readLine()) != null) {
out.println(line + "
");
int index = line.indexOf(«token»);
if (index != -1) {
token = line.substring(9);
}
}
Почитать о Rest-
developers.sun.com/identity/reference/techart/id-svcs.html)
blogs.sun.com/indira/entry/rest_based_identity_services_in
В итоге получился бесплатный относительно надежный сервис авторизации, который уже можно прикручивать к чемулибо еще)
Куча информации по OpenSSO и связанному с ним blogs.sun.com/indira