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

时间:2015-10-07 07:19:49

标签: spring spring-security spring-security-oauth2

我在基于Spring的OAuth2提供程序的授权端点方面遇到了一些麻烦。我需要来自客户的更多信息,而不是目前可能的信息。这就是我想要实现的目标:

custom parameter

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

对当前Spring代码中认证端点的工作原理进行了一些研究。我发现Authorization Endpoint使用method named authorize来获取所有正在设置的参数,然后将其转换为AuthorizationRequest。在进一步查看AuthorizationRequest类时,我发现它持有map with extensions,在整个授权过程中都会填充。但它似乎没有填充我的自定义参数(如上所示)。事实上这只是看代码,所以我可能错了。

使用我的自定义实现扩展AuthorizationEndpoint是一个好主意还是有更好更清晰的方法来执行此操作?

更新#1(07-10-2015)

我想使用自定义参数的地方在我自己的AuthenticationProvider实现中。我需要在本课程的authenticate method内提供信息。

更新#2(07-10-2015)

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

enter image description here

也许我可以通过扩展部分Spring安全类或通过JavaScript在HTML中获取引用来获取引用Url。这是一个好主意还是应该使用其他方法?

1 个答案:

答案 0 :(得分:1)

所以我设法通过在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 security登录页面之前调用的请求的URL。第二个日志方法打印出在此URL中找到的参数。 This question and answer帮助我为我的问题创建解决方案。