<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>Folks:<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>First of all a very big &nbsp;THANK YOU to Peter Schober and Chad La Joie for their invaluable suggestions.&nbsp; Adding my jar file to the $IDP_HOME/lib location, as well as to the war file made a big difference. <o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>By looking at the user-contributed project for x509 external authentication I have progressed to the point where I am both arriving at my External Auth servlet,&nbsp; and getting the following messages in my idp-process.log file:<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>11:41:51.900 - DEBUG [edu.internet2.middleware.shibboleth.idp.authn.AuthenticationEngine:514] - Completing user authentication process<o:p></o:p></p><p class=MsoNormal>11:41:51.900 - DEBUG [edu.internet2.middleware.shibboleth.idp.authn.AuthenticationEngine:585] - Validating authentication was performed successfully<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>I am now confused by the behavior of the login.jsp in my idp webapp. After a &#8220;successful&#8221; authentication indication in the idp-process.lig file (above)&nbsp; I wind up on the error.jsp page in the idp project. <o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>The process flow goes like this:<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Hit the &#8220;protected URL&#8221;.<o:p></o:p></p><p class=MsoNormal>Get to the login page<o:p></o:p></p><p class=MsoNormal>Enter a user id and password<o:p></o:p></p><p class=MsoNormal>Hit submit<o:p></o:p></p><p class=MsoNormal>Logs indicate a successful trip through my external handler servlet and successful auth by Auth Engine<o:p></o:p></p><p class=MsoNormal>Land on error .jsp page.<o:p></o:p></p><p class=MsoNormal>(if I pull down the &#8220;recent destinations menu in firefox and re-send to the last url, I see the page I originally expected)<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>My suspicion is that there is missing information in the request or response object from the servlet, before returning control to the AuthEngine class.&nbsp; The &#8220;repeat send&#8221; behavior suggests that there&#8217;s an SSO token hanging around for me somewhere. &nbsp;But examining the processing done in the x509 object doesn&#8217;t provide me with a clue as to what specific field in the Request or Response object needs to be se in order to let the Login.jsp page know that the Authentication really took place successfully.&nbsp; I would have guessed that once the Authentication Engine is logging a successful auth result, it would have placed an indication of that success into the appropriate object. This is probably my lack of web application programming knowledge but I&#8217;m stumped.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>If anyone has experience with this kind of thing,&nbsp; I could really use a hint.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Best regards,<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Martin pardee<o:p></o:p></p><p class=MsoNormal><a href="mailto:mlp@research.att.com">mlp@research.att.com</a><o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>PS &#8211; <o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>My servlet&#8217;s service() method looks like this:<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>&nbsp; protected void service(HttpServletRequest request, HttpServletResponse response)<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp; throws ServletException, IOException<o:p></o:p></p><p class=MsoNormal>&nbsp; {<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp; String username = request.getParameter(&quot;j_username&quot;);<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp; String password = request.getParameter(&quot;j_password&quot;);<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal> &nbsp;&nbsp;<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;if ((username == null) || (password == null)) {<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirectToLoginPage(request, response);<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp; }<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp; <o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;Subject subject = new Subject();<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp; Set&lt;Principal&gt; principals = subject.getPrincipals();<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;// Add the public credentials of the subject<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp; Set publicCredentials = subject.getPublicCredentials();<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>&nbsp; &nbsp;&nbsp;request.setAttribute(LoginHandler.SUBJECT_KEY, subject);<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute(LoginHandler.AUTHENTICATION_METHOD_KEY, &quot;urn:oasis:names:tc:SAML:2.0:ac:classes:SAFE&quot;);<o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <o:p></o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AuthenticationEngine.returnToAuthenticationEngine(request, response);&nbsp;&nbsp; <o:p></o:p></p><p class=MsoNormal>}<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></body></html>