<div dir="ltr"><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px">Hello all,</p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px"><br></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px">I am using shib-cas-authn3 to delegate authentication from shibboleth 3.1.1 to CAS and I would like to expose extended attributes from shibboleth above and beyond the uid/person name attribute. I don’t know how to extract the extended attributes that I have programmatically attached to the HttpServletRequest as well as the [user] session from AuthenticatedNameTranslator within shib-cas-authn3 (fork <a href="https://github.com/manalotoj/shib-cas-authn3" target="_top" rel="nofollow" link="external" style="font-size:1em;color:rgb(85,26,139)">https://github.com/manalotoj/shib-cas-authn3</a>). Modified shib-cas-authn3:</p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px;margin-bottom:0.0001pt"><span style="font-size:10pt;font-family:Consolas"><br></span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px;margin-bottom:0.0001pt"><b><span style="font-size:10pt;font-family:Consolas;color:rgb(127,0,85)">public</span></b><span style="font-size:10pt;font-family:Consolas"> </span><b><span style="font-size:10pt;font-family:Consolas;color:rgb(127,0,85)">void</span></b><span style="font-size:10pt;font-family:Consolas"> doTranslation(</span><b><span style="font-size:10pt;font-family:Consolas;color:rgb(127,0,85)">final</span></b><span style="font-size:10pt;font-family:Consolas"> HttpServletRequest </span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">request</span><span style="font-size:10pt;font-family:Consolas">, </span><b><span style="font-size:10pt;font-family:Consolas;color:rgb(127,0,85)">final</span></b><span style="font-size:10pt;font-family:Consolas">  HttpServletResponse </span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">response</span><span style="font-size:10pt;font-family:Consolas">,</span><span style="font-size:10pt;font-family:Consolas"></span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px;margin-bottom:0.0001pt"><span style="font-size:10pt;font-family:Consolas">...</span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px;margin-bottom:0.0001pt"><span style="font-size:10pt;font-family:Consolas">        Map<String, Object> </span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">principalAttributes</span><span style="font-size:10pt;font-family:Consolas"> = </span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">assertion</span><span style="font-size:10pt;font-family:Consolas">.getPrincipal().getAttributes();</span><span style="font-size:10pt;font-family:Consolas"></span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px;margin-bottom:0.0001pt"><span style="font-size:10pt;font-family:Consolas">        </span><span style="font-size:10pt;font-family:Consolas;color:rgb(0,0,192)">logger</span><span style="font-size:10pt;font-family:Consolas">.debug(</span><span style="font-size:10pt;font-family:Consolas;color:rgb(42,0,255)">"principal attributes: {}"</span><span style="font-size:10pt;font-family:Consolas">, </span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">principalAttributes</span><span style="font-size:10pt;font-family:Consolas">.toString());</span><span style="font-size:10pt;font-family:Consolas"></span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px;margin-bottom:0.0001pt"><span style="font-size:10pt;font-family:Consolas">              </span><span style="font-size:10pt;font-family:Consolas"></span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px;margin-bottom:0.0001pt"><span style="font-size:10pt;font-family:Consolas">        </span><span style="font-size:10pt;font-family:Consolas;color:rgb(63,127,95)">// add all other <u>cas</u> attributes to the request</span><span style="font-size:10pt;font-family:Consolas"></span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px;margin-bottom:0.0001pt"><span style="font-size:10pt;font-family:Consolas">        </span><b><span style="font-size:10pt;font-family:Consolas;color:rgb(127,0,85)">for</span></b><span style="font-size:10pt;font-family:Consolas"> (Object </span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">o</span><span style="font-size:10pt;font-family:Consolas"> : </span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">principalAttributes</span><span style="font-size:10pt;font-family:Consolas">.entrySet()) {</span><span style="font-size:10pt;font-family:Consolas"></span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px;margin-bottom:0.0001pt"><span style="font-size:10pt;font-family:Consolas">              </span><span style="font-size:10pt;font-family:Consolas;color:rgb(100,100,100)">@SuppressWarnings</span><span style="font-size:10pt;font-family:Consolas">(</span><span style="font-size:10pt;font-family:Consolas;color:rgb(42,0,255)">"unchecked"</span><span style="font-size:10pt;font-family:Consolas">)</span><span style="font-size:10pt;font-family:Consolas"></span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px;margin-bottom:0.0001pt"><span style="font-size:10pt;font-family:Consolas">              Map.Entry<String, Object> </span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">pair</span><span style="font-size:10pt;font-family:Consolas"> = (Map.Entry<String, Object>) </span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">o</span><span style="font-size:10pt;font-family:Consolas">;</span><span style="font-size:10pt;font-family:Consolas"></span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px;margin-bottom:0.0001pt"><span style="font-size:10pt;font-family:Consolas">            </span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">request</span><span style="font-size:10pt;font-family:Consolas">.setAttribute(</span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">pair</span><span style="font-size:10pt;font-family:Consolas">.getKey(), </span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">pair</span><span style="font-size:10pt;font-family:Consolas">.getValue());</span><span style="font-size:10pt;font-family:Consolas"></span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px;margin-bottom:0.0001pt"><span style="font-size:10pt;font-family:Consolas">            </span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">request</span><span style="font-size:10pt;font-family:Consolas">.getSession().setAttribute(</span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">pair</span><span style="font-size:10pt;font-family:Consolas">.getKey(), </span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">pair</span><span style="font-size:10pt;font-family:Consolas">.getValue());</span><span style="font-size:10pt;font-family:Consolas"></span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px;margin-bottom:0.0001pt"><span style="font-size:10pt;font-family:Consolas">            </span><span style="font-size:10pt;font-family:Consolas;color:rgb(0,0,192)">logger</span><span style="font-size:10pt;font-family:Consolas">.debug(</span><span style="font-size:10pt;font-family:Consolas;color:rgb(42,0,255)">"Set the '{}' attribute with value '{}' in request and session."</span><span style="font-size:10pt;font-family:Consolas">, </span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">pair</span><span style="font-size:10pt;font-family:Consolas">.getKey(), </span><span style="font-size:10pt;font-family:Consolas;color:rgb(106,62,62)">pair</span><span style="font-size:10pt;font-family:Consolas">.getValue());</span><span style="font-size:10pt;font-family:Consolas"></span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px;margin-bottom:0.0001pt"><span style="font-size:10pt;font-family:Consolas">        }      </span><span style="font-size:10pt;font-family:Consolas"></span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px"><span style="font-size:10pt;line-height:14.2666664123535px;font-family:Consolas">    }</span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px"><span style="font-size:10pt;line-height:14.2666664123535px;font-family:Consolas"><br></span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px"><span style="font-size:10pt;line-height:14.2666664123535px;font-family:Consolas">I have stubbed and configured everything outside of the actual retrieval of the extended attributes from within a custom data connector (refer to<a href="https://github.com/manalotoj/campuslogic-shib3/blob/master/campuslogic-dc/src/main/java/net/campuslogic/shibboleth/dataconnector/CampusLogicCasDataConnector.java" target="_top" rel="nofollow" link="external" style="font-size:1em;color:rgb(85,26,139)">https://github.com/manalotoj/campuslogic-shib3/blob/master/campuslogic-dc/src/main/java/net/campuslogic/shibboleth/dataconnector/CampusLogicCasDataConnector.java</a>); everything works as expected.</span></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px"><br></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px">How do I access either the userSession or the HttpServletRequest from my custom data connector (extends AbstractDataConnector)? I have looked at all BaseContext instances (made available through AttributeResolverContext including getParent() and all of its context objects) and I can’t find anything. I also tried to use a scripted attribute resolver configuration but ran into a similar roadblock in that requestContext.userSession is not available/implemented.</p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px"> </p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px">Thanks,</p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px"></p><p class="MsoNormal" style="color:rgb(0,0,0);font-family:Verdana,Geneva,Helvetica,Arial,sans-serif;font-size:13.4399995803833px">John</p></div>