我已经按照此处指定的方式启动并运行了Springboot Active Directory示例:
我可以使用我创建并授予其“ Windows Azure Active Directory”权限的客户端ID,以我的Azure AD凭据登录。
下一步是我想要获得登录用户的个人资料图片,因此我需要从OAuth2AuthorizationResponse
处获得授权码
我不清楚如何访问此数据。在返回的OAuth2User对象中不可用
我尝试在/ login / oauth2 / code / azure上设置HandlerInterceptor,以便我可以截获Response,但这永远不会被击中(?)
我还尝试添加自定义过滤器:
http.addFilterAfter(
new CustomFilter(), BasicAuthenticationFilter.class)
但这对于/login/oauth2/code/azure
URI永远不会被击中
答案 0 :(得分:0)
我能够通过覆盖SavedRequestAwareAuthenticationSuccessHandler
并将其添加到我的安全配置中来拦截身份验证响应:
http....
.and().oauth2Login().successHandler(authCodeCachingSuccessHandler)
我在其中缓存代码并传递给超类进行处理:
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws ServletException, IOException {
Map<String, String[]> parameterMap = request.getParameterMap();
String[] s = parameterMap.get("code");
tokenCache.setAuthCode( (DefaultOidcUser) authentication.getPrincipal(), s[0] );
super.onAuthenticationSuccess(request, response, authentication);
}
我怀疑这是“最佳实践”,但确实有效,而且我还没有找到一种更优雅的方法