【问题标题】:Authentication with Spring oAuth2.0使用 Spring oAuth2.0 进行身份验证
【发布时间】:2013-12-08 14:27:49
【问题描述】:

我想通过 facebook/twitter 帐户对我网站上的用户进行身份验证。但在 spring 示例中,spring 要求我先登录,只有在那之后,当用户已经拥有角色时,我才能连接到 facebook 并获取一些数据。即使 facebookData 控制器 (intercept-url pattern="/**" access="permitAll") 没有权限,spring 也会将我重定向到登录页面。

  • 是否意味着,OpenAuth 不能用于身份验证 匿名用户?

我的弹簧安全:

    <http use-expressions="true">
        <form-login login-page="/login" />
        <intercept-url pattern="/**" access="permitAll" />
        <logout />
        <custom-filter ref="oauth2ClientFilter" after="EXCEPTION_TRANSLATION_FILTER" />
    </http>
    <oauth:client id="oauth2ClientFilter" />

<oauth:resource id="facebook" type="authorization_code" client-id="..." client-secret="..." authentication-scheme="query"
    access-token-uri="https://graph.facebook.com/oauth/access_token" user-authorization-uri="https://www.facebook.com/dialog/oauth" token-name="oauth_token" client-authentication-scheme="form" scope="email"/>

<bean id="facebookController" class="org.springframework.security.oauth.examples.tonr.mvc.FacebookController" />

<oauth:rest-template resource="facebook" id="fasebookRestTemplate">
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <bean class="org.springframework.http.MediaType">
                            <!--facebook sends its json as text/javascript for some reason -->
                            <constructor-arg value="text" />
                            <constructor-arg value="javascript" />
                        </bean>
                        <bean class="org.springframework.http.MediaType">
                            <constructor-arg value="application" />
                            <constructor-arg value="json" />
                        </bean>
                    </list>
                </property>
            </bean>
        </list>
    </property>
</oauth:rest-template>

还有 facebook 控制器:

@Autowired
private RestOperations facebookRestTemplate;

@RequestMapping("/facebook/info")
public String photos(Model model) throws Exception {

    ObjectNode resultNode = facebookRestTemplate.getForObject("https://graph.facebook.com/me/friends", ObjectNode.class);
    ArrayNode data = (ArrayNode) resultNode.get("data");
    ArrayList<String> friends = new ArrayList<String>();
    for (JsonNode dataNode : data) {
        friends.add(dataNode.get("name").getTextValue());
    }
    model.addAttribute("friends", friends);
    return "facebook";
}

【问题讨论】:

    标签: java spring spring-security oauth-2.0


    【解决方案1】:

    有一个很酷的库可以做到这一点:https://github.com/socialsignin/spring-social-security

    我已经成功地使用了它——用户所要做的就是连接到 Facebook 来获得身份验证。要在第一次连接时创建新用户,您只需扩展 SpringSocialSecurityConnectionSignUp,覆盖 execute 方法。 Github 页面很好地解释了你需要做什么。它还有一些非常有用的示例项目。

    项目在 Maven 中。玩得开心!

    【讨论】:

    猜你喜欢
    • 2012-09-04
    • 2017-09-08
    • 2022-09-23
    • 2011-10-17
    • 2012-11-27
    • 2021-03-30
    • 1970-01-01
    • 2018-08-29
    相关资源
    最近更新 更多