相关疑难解决方法(0)

如何在春季oauth2 OAuth2AccessToken请求上设置代理,或者如何覆盖OAuth2AccessTokenSupport restTemplate变量?

我尝试通过以下方式设置网络代理,但任何一种方法均无效

1:设置jvm变量,例如-Dhttp.proxyHost = -Dhttp.proxyPort = .......
2:创建Bean。

@Bean
public RestTemplate restTemplate() {
    final String proxyHost = "######"; // host
    final int proxyPort = ####;  // port
    SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
    factory.setProxy(new Proxy(Type.HTTP, new InetSocketAddress(proxyHost, proxyPort)));
    return new RestTemplate(factory);
}
Run Code Online (Sandbox Code Playgroud)

但是,此配置被OAuth2AccessTokenSupport.restTemplate覆盖。

因此,以下方法始终返回新创建的rest模板对象。

org.springframework.security.oauth2.client.token.OAuth2AccessTokenSupport

protected RestOperations getRestTemplate() {
    if (restTemplate == null) {
        synchronized (this) {
            if (restTemplate == null) {
                RestTemplate restTemplate = new RestTemplate();
                restTemplate.setErrorHandler(getResponseErrorHandler());
                restTemplate.setRequestFactory(requestFactory);
                restTemplate.setInterceptors(interceptors);
                this.restTemplate = restTemplate;
            }
        }
    }
    if (messageConverters == null) {
        setMessageConverters(new …
Run Code Online (Sandbox Code Playgroud)

proxy spring spring-security spring-boot spring-security-oauth2

5
推荐指数
2
解决办法
4016
查看次数

为什么 AccessTokenRequest 的 PreservedState 永远为空,并产生与 CSRF 相关的 InvalidRequestException?

作为上下文,我一直在尝试获得一个相当简单的 @SprintBootApplication,其中包含一个附加的 @EnableOAuth2Sso 注释,并且与 WSO2 Identity Server 集成了很长一段时间。

在我看来,让这个工作应该是一个配置问题(正如在Spring Cloud Security上所宣传的那样) - 但到目前为止我没有运气。

为了了解发生了什么,我使用调试器逐步执行 spring-security-oauth2 代码以找出发生了什么。这样做时,我注意到我的 AccessTokenRequest 的 PreservedState 永远为空,并产生与 CSRF 相关的 InvalidRequestException。这是相关代码:

public class AuthorizationCodeAccessTokenProvider extends OAuth2AccessTokenSupport implements AccessTokenProvider {

....

private MultiValueMap<String, String> getParametersForTokenRequest(AuthorizationCodeResourceDetails resource,
        AccessTokenRequest request) {

    MultiValueMap<String, String> form = new LinkedMultiValueMap<String, String>();
    form.set("grant_type", "authorization_code");
    form.set("code", request.getAuthorizationCode());

    Object preservedState = request.getPreservedState();
    if (request.getStateKey() != null || stateMandatory) {
        // The token endpoint has no use for the state so we don't send it back, …
Run Code Online (Sandbox Code Playgroud)

spring-security wso2is spring-boot spring-security-oauth2 spring-cloud

4
推荐指数
1
解决办法
6045
查看次数