如何扩展 OAuth2 授权端点的参数?

How can I extend the parameters of the OAuth2 authorization endpoint?

我在基于 Spring 的 OAuth2 提供商的授权端点方面遇到了一些问题。我需要从客户那里获得比目前更多的信息。这就是我想要实现的目标:

我稍后在身份验证过程中需要自定义参数。有什么简单的方法可以用我的自定义参数扩展默认参数,还是我需要自己实现某个 class?

对身份验证端点如何在当前 Spring 代码中工作进行了一些研究。我发现授权端点使用 method named authorize that takes all the parameter that are being set and converts then into an AuthorizationRequest. While looking further into the AuthorizationRequest class I found that it holds a map with extensions 在整个授权过程中被填充。但它似乎没有填充我的自定义参数(如上所示)。其实这只是看代码,所以我可能是错的。

用我的自定义实现扩展 AuthorizationEndpoint 是个好主意还是有更好更简洁的方法来做到这一点?

更新 #1 (07-10-2015)

我想使用自定义参数的地方是在我自己的 AuthenticationProvider 实现中。我需要此 class.

authenticate method 内可用的信息

更新 #2 (07-10-2015)

似乎是在 AuthorizationEndpoint 之前调用了 AuthorizationProvider。这意味着自定义参数是在我需要它的class之后获得的(所以为时已晚)。

也许我可以通过扩展 Spring 安全性 classes 的一部分或通过 HTML 通过 JavaScript.这是个好主意还是我应该使用其他方法?

因此,我通过在 Google 上搜索更多信息,设法自己解决了这个问题。 您需要做的是与 HttpSessionRequestCache 对话以获取推荐 URL。这就是我在自己的 AuthenticationProvider

实现中解决它的方法
@Component
public class CustomProvider implements AuthenticationProvider {

  @Autowired
  private HttpServletRequest httpRequest;

  @Autowired
  private HttpServletResponse httpResponse;

  @Override
  public Authentication authenticate(Authentication authentication) throws AuthenticationException {

    SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(httpRequest, httpResponse);
    logger.info("Referral URL: " + savedRequest.getRedirectUrl());
    logger.info("Parameters: " + savedRequest.getParameterMap().keySet().toString());

  }

}

这将打印出在前往 spring 安全登录页面之前调用的请求的 URL。第二个日志方法打印出在 URL 中找到的参数。 This question and answer 帮助我为我的问题创建解决方案。