Войдите в adfs через openam с помощью java-приложения

Я настроил adfs в качестве поставщика удостоверений и openam в качестве поставщика услуг, но как проверить, нормально ли работает вход в систему с adfs через openam.

Может ли кто-нибудь помочь мне войти на сервер adfs через openam с помощью java-приложения.

Спасибо,


person pbhle    schedule 23.10.2012    source источник


Ответы (1)


См. раздел Конфигурация OpenAM и ADFS2.

В статье рассмотрены все ваши вопросы.

Обновление:

Я обычно делаю это с помощью OpenSSO/OpenAM Java Fedlet.

См. Использование Fedlets в веб-приложениях Java (глава 8).

Код (согласно федлету) для отображения содержимого токена выглядит так:

Response samlResp = (Response) map.get(SAML2Constants.RESPONSE); 
Assertion assertion = (Assertion) map.get(SAML2Constants.ASSERTION);
Subject subject = (Subject) map.get(SAML2Constants.SUBJECT);
String entityID = (String) map.get(SAML2Constants.IDPENTITYID);
String spEntityID = (String) map.get(SAML2Constants.SPENTITYID);
NameID nameId = (NameID) map.get(SAML2Constants.NAMEID);
String value = nameId.getValue();
String format = nameId.getFormat();
out.println("<br><br><b>Single Sign-On successful with IDP " 
    + entityID + ".</b>");
out.println("<br><br>");
out.println("<table border=0>");
if (format != null) {
    out.println("<tr>");
    out.println("<td valign=top><b>Name ID format: </b></td>");
    out.println("<td>" + format + "</td>");
    out.println("</tr>");
}
if (value != null) {
    out.println("<tr>");
    out.println("<td valign=top><b>Name ID value: </b></td>");
    out.println("<td>" + value + "</td>");
    out.println("</tr>");
}    
String sessionIndex = (String) map.get(SAML2Constants.SESSION_INDEX);
if (sessionIndex != null) {
    out.println("<tr>");
    out.println("<td valign=top><b>SessionIndex: </b></td>");
    out.println("<td>" + sessionIndex + "</td>");
    out.println("</tr>");
}    

Map attrs = (Map) map.get(SAML2Constants.ATTRIBUTE_MAP);
if (attrs != null) {
    out.println("<tr>");
    out.println("<td valign=top><b>Attributes: </b></td>");
    Iterator iter = attrs.keySet().iterator();
    out.println("<td>");
    while (iter.hasNext()) {
        String attrName = (String) iter.next();
        Set attrVals = (HashSet) attrs.get(attrName);
        if ((attrVals != null) && !attrVals.isEmpty()) {
            Iterator it = attrVals.iterator();
            while (it.hasNext()) {
                out.println(attrName + "=" + it.next() + "<br>");
            }
        }
    }
    out.println("</td>");
    out.println("</tr>");
}
out.println("</table>");
person rbrayb    schedule 23.10.2012
comment
они говорят, просто откройте URL-адрес в браузере, но если я открою URL-адрес с помощью почтового метода, я получаю исключение Ошибка обработки AuthnRequest. Нулевой ввод, тогда что это значит, нужно ли передавать дополнительные параметры этому URL-адресу? - person pbhle; 26.10.2012
comment
К какому URL вы пытаетесь получить доступ? Настройте журнал отладки lists.forgerock.org/pipermail/openam/2012- March/005339.html и посмотрите, даст ли это вам какую-нибудь подсказку. - person rbrayb; 27.10.2012
comment
когда я изменил AuthnRequestsSigned=false и WantAssertionsSigned=false в sp.xmlerror, он исчез и показывает URL-адрес с токеном SAMLrequest. - person pbhle; 29.10.2012
comment
после аутентификации в adfs ответ SAML придет на мой openam, и будет сгенерирован токен openam, но как я получу доступ к этому токену openam из моего приложения Java? - person pbhle; 29.10.2012
comment
необходимо ли устанавливать клиентский SDK, если вы хотите получить доступ к URL-адресу openam через приложение Java? - person pbhle; 29.10.2012
comment
Что вы подразумеваете под клиентским SDK? - person rbrayb; 29.10.2012
comment
означает OpenAM Client SDK для подключения к openam и получения токена sso, который декодируется openam из ответа saml. и мой openam выступает в качестве поставщика услуг, а ADFS - это IP, поэтому что подразумевается под размещенным поставщиком удостоверений. - person pbhle; 30.10.2012
comment
Извините, я не гуру OpenAM и никогда не использовал Client SDK. Я обычно делаю это через Fedlet. - person rbrayb; 30.10.2012
comment
хорошо .. Я попытался использовать федлет, но он выполняет вход в openam bcz. Я предоставил IDP как openam при создании федлета, но что, если я не хочу входить в систему на сервере ADFS. - person pbhle; 31.10.2012
comment
хорошо.. Я пытался использовать федлет, но он выполняет вход в openam и перенаправляется в приложение федерации, потому что я предоставил IDP как openam при создании федлета, но что, если я хочу войти на сервер ADFS. :( - person pbhle; 31.10.2012
comment
Если вы используете Fedlet, вы переходите прямо из своего Java-приложения либо в ADFS, либо в OpenAM, в зависимости от того, как вы его настроите. Мой комментарий о Fedlet заключался в том, что это была единственная часть OpenAM, которую я когда-либо использовал. Поэтому я скопировал приведенный выше код, чтобы показать, как отображать токен. Это может помочь blog.auth360.net/2011/10/09/. Обратите внимание, что есть три части - все в блоге. - person rbrayb; 31.10.2012