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

标签 spring spring-security spring-security-oauth2

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

custom parameter

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

对身份验证端点如何在当前 Spring 代码中工作进行了一些研究。我发现授权端点使用 method named authorize它采用所有正在设置的参数,然后转换为 AuthorizationRequest。在进一步查看 AuthorizationRequest 类时,我发现它包含一个 map with extensions。这是在整个授权过程中填写的。但它似乎没有填充我的自定义参数(如上所示)。这其实只是看代码,所以我可能是错的。

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

更新 #1 (07-10-2015)

我想使用自定义参数的地方是在我自己的 AuthenticationProvider 实现中。我需要在 authenticate method 中提供信息这个类的。

更新 #2 (07-10-2015)

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

enter image description here

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

最佳答案

因此,我通过在 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帮助我为我的问题创建解决方案。

关于spring - 如何扩展 OAuth2 授权端点的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32986049/

相关文章:

java - 即使使用 create-session ="stateless",Spring Security Oauth2 也会生成 jsessiond

oauth-2.0 - 现在不推荐使用密码授予的替代方法是什么?认证 2.0

java - ZuulException 转发错误,ClientException null

java - 如何使用 Spring 在 OAuth2 身份验证中生成客户端 key

java - 使用 Java 的 Activity 流

java - spring-cloud-starter-zipkin 与 jdbc 冲突?

java - 如何将 Java Web 应用程序转换为桌面 (.exe) 应用程序

java - 使现有的 Spring Batch 应用程序在多个节点上运行

java - Spring Security Role Hierarchy 无法使用 Java Config

spring-security - 数据库级 ACL 过滤