<div dir="ltr"><div style="font-size:12.8px"><span style="font-size:12.8px">Disclaimer: I really have no idea what I'm talking about, but it seems I might be a half-step ahead of you.</span></div><div style="font-size:12.8px"><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Christopher Bongaarts:</span><br></div><div style="font-size:12.8px"><span style="font-size:12.8px">> Is there some way to pick up a flow where it left off? </span><br></div><div style="font-size:12.8px"><span style="font-size:12.8px"><br></span></div><div><div style="font-size:12.8px">Look at attribute release/consent for inspiration. A simpler example that comes very close to both of your expressed needs is IDP-913, which is not hard to backport to 3.2.1 -- even I did it!</div><div style="font-size:12.8px"><br></div><div style="font-size:small"><span style="font-size:12.8px"><a href="https://issues.shibboleth.net/jira/browse/IDP-913" target="_blank">https://issues.shibboleth.net/jira/browse/IDP-913</a></span></div><div><span style="font-size:12.8px"><a href="http://svn.shibboleth.net/view/java-identity-provider?view=revision&revision=8085" target="_blank">http://svn.shibboleth.net/view/java-identity-provider?view=revision&revision=8085</a></span><br><div><div style="font-size:12.8px"><img src="https://ssl.gstatic.com/ui/v1/icons/mail/images/cleardot.gif"></div><div style="font-size:12.8px">Since you can do this, your other more intrusive questions about the auth process don't really need to be answered. <span style="font-size:12.8px">I'd be happy to share code online or even in person, since we're neighbors.</span></div><div style="font-size:12.8px"><br></div></div></div></div><div style="font-size:12.8px"><span style="font-size:12.8px">> Perhaps as information in a dynamic link to our pw/secrets app (so it has a URL to return the user to when finished)?  Maybe Spring has some magic that allows this?</span></div><div style="font-size:12.8px"><br></div><div><span style="font-size:12.8px">$flowExecutionUrl&_eventId_proceed=1 is the way back to the shibb session, but you still need to authenticate from shibb to your external app.</span><br></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">The "best" way to do this is probably to use the CAS support in shibb. Since I'm unequipped to do it the best way, I am looking to accomplish the handoff by putting Jetty behind Apache, running some stub scripts at the Apache layer, and communicating between the two layers with browser cookies. It is possible to both set and read cookies entirely with scripted attributes. Then you can use those attributes as activation conditions for minor variations on Context Check and Expiring Password flows. Something like:</div><div style="font-size:12.8px"><br></div><div><div><span style="font-size:12.8px">    <resolver:AttributeDefinition id="carlVerifiedCookie" xsi:type="ad:Script"</span></div><div><span style="font-size:12.8px">                                  customObjectRef="shibboleth.HttpServletRequest" />></span></div><div><span style="font-size:12.8px">        <ad:Script><![CDATA[</span></div><div><span style="font-size:12.8px">            logger = Java.type("org.slf4j.LoggerFactory").getLogger("net.shibboleth.idp.attribute");</span></div><div><span style="font-size:12.8px">            for (i = 0; i < custom.getCookies().length; i++) {</span></div><div><span style="font-size:12.8px">                cookie = custom.getCookies()[i];</span></div><div><span style="font-size:12.8px">                if (cookie.getName() == "carl_verified") {</span></div><div><div style="font-size:12.8px">                    clientCookies.addValue(cookie.getValue());</div><div><div><span style="font-size:12.8px">            }</span></div><div><span style="font-size:12.8px">            <a href="http://logger.info" target="_blank">logger.info</a>("Created clientCookies attribute as {}", clientCookies.getValues());</span></div><div><span style="font-size:12.8px">    ]]></ad:Script></span></div><div><span style="font-size:12.8px">    </resolver:AttributeDefinition></span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px"> // PoC. In reality I am considering setting the cookie to something like rot13(username) + time + hmac(key, username + timestamp + browser)</span></div><div><div style="font-size:12.8px">    <resolver:AttributeDefinition id="setClientCookie" xsi:type="ad:Script"</div><div style="font-size:12.8px">                                  customObjectRef="shibboleth.HttpServletResponse"</div><div style="font-size:12.8px">                                  p:activationCondition-ref="carl.carlIsVerifiedCondition"></div><div><div><span style="font-size:12.8px">        <ad:Script><![CDATA[</span></div><div><span style="font-size:12.8px">            logger = Java.type("org.slf4j.LoggerFactory").getLogger("net.shibboleth.idp.attribute");</span></div><div><span style="font-size:12.8px">            uuidgen = Java.type("java.util.UUID");</span></div><div><span style="font-size:12.8px">            uuid = uuidgen.randomUUID();</span></div><div><span style="font-size:12.8px">            CookieClass = Java.type('javax.servlet.http.Cookie');</span></div><div><span style="font-size:12.8px">            cookie = new CookieClass("carl_verified",uuid.toString());</span></div><div><span style="font-size:12.8px">            cookie.setSecure(true);</span></div><div><span style="font-size:12.8px">            cookie.setMaxAge(8640000);</span></div><div><span style="font-size:12.8px">            cookie.setPath('/');</span></div><div><span style="font-size:12.8px">            custom.addCookie(cookie);</span></div><div><span style="font-size:12.8px">    ]]></ad:Script></span><br></div><div><span style="font-size:12.8px">    </resolver:AttributeDefinition></span></div></div></div></div></div></div></div>