来自Azure AD OAuth2AuthorizationResponse的授权代码

时间:2018-09-25 14:09:51

标签: azure spring-boot

我已经按照此处指定的方式启动并运行了Springboot Active Directory示例:

https://github.com/Microsoft/azure-spring-boot/tree/master/azure-spring-boot-samples/azure-active-directory-spring-boot-backend-sample

我可以使用我创建并授予其“ 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永远不会被击中

1 个答案:

答案 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);
 }

我怀疑这是“最佳实践”,但确实有效,而且我还没有找到一种更优雅的方法