Spring OAuth2 XML配置仍然给出有关重定向和匿名访问的错误

时间:2019-07-11 12:32:02

标签: java spring oauth-2.0 spring-security-oauth2

我一直在尝试让Spring OAuth2使用XML配置。我有一个使用Spring Security和最新版本库的完全(非Spring Boot)工作应用程序。在此之前,我已经配置了Spring Social for Google并可以正常工作。

XML配置。

从应用程序上下文开始(还有很多,但可能不相关)。我已经编写了自己的ClientTokenServicesImpl,但功能相同。

<oauth:client id="oAuth2ClientFilter" />
<oauth:resource id="google" type="authorization_code" client-id="${google.clientId}" client-secret="${google.clientSecret}" access-token-uri="${google.accessTokenUri}"
    user-authorization-uri="${google.authorisationUri}" scope="email,profile,openid" />
<oauth:rest-template id="oAuthRestTemplate" resource="google" access-token-provider="accessTokenProvider" />

<bean id="accessTokenProvider" class="org.springframework.security.oauth2.client.token.AccessTokenProviderChain">
    <property name="clientTokenServices">
        <bean class="com.tetsuwantech.atom.manager.authentication.oauth2.ClientTokenServicesImpl" />
    </property>
    <constructor-arg>
        <list>
            <bean class="org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeAccessTokenProvider" />
            <bean class="org.springframework.security.oauth2.client.token.grant.implicit.ImplicitAccessTokenProvider" />
            <bean class="org.springframework.security.oauth2.client.token.grant.password.ResourceOwnerPasswordAccessTokenProvider" />
            <bean class="org.springframework.security.oauth2.client.token.grant.client.ClientCredentialsAccessTokenProvider" />
        </list>
    </constructor-arg>
</bean>

<security:http entry-point-ref="authenticationEntryPoint" access-decision-manager-ref="accessDecisionManager">
...
    <security:intercept-url pattern="/oauth2/**" access="permitAll" />
...
    <security:custom-filter after="EXCEPTION_TRANSLATION_FILTER" ref="oAuth2ClientFilter" />
</security:http>

控制器

我有一个简单的Controller,它只是对Google进行了基本调用以获取用户个人资料。正确获取数据后,就可以使用它来创建新的用户帐户或对用户进行身份验证。 (我本以为Spring会为我做身份验证。)

@Inject
private RestOperations restTemplate;

@RequestMapping(value = "/oauth2/google")
public String google() {

    ObjectNode objectNode = restTemplate.getForObject("https://people.googleapis.com/v1/people/me", ObjectNode.class);
    return "redirect:/";
}

UserRedirectRequiredException

如果用户已登录,然后点击我得到的URL

org.springframework.security.oauth2.client.resource.UserRedirectRequiredException: A redirect is required to get the users approval

大多数示例都谈到将oAuth2ClientFilter提升到SECURITY_CONTEXT_FILTER之后,但这对我没有用。

InsufficientAuthenticationException

如果用户未通过身份验证,那么我会得到

org.springframework.security.authentication.InsufficientAuthenticationException: Authentication is required to obtain an access token (anonymous not allowed)

考虑到我想通过Google进行用户身份验证,这似乎很讽刺。

我已经看过https://projects.spring.io/spring-security-oauth/docs/oauth2.html中的示例,以及大量的Stackoverflow和其他示例,但看不到应该发生什么或哪里出错了。

0 个答案:

没有答案