如何扩展 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 帮助我为我的问题创建解决方案。
我在基于 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 帮助我为我的问题创建解决方案。