princiapal.getName()返回ID而不是facebook的名称

时间:2017-05-14 19:41:32

标签: java facebook-graph-api spring-boot single-sign-on spring-security-oauth2

我使用spring-security-oauth实现了我的自定义auth服务器以及单点登录的几个客户端应用程序,我可以选择facebook和google登录。

现在我的客户端应用程序有了这个控制器:

    @RequestMapping({ "/user", "/me" })
public Principal user(Principal principal) {
    return principal;
}

对于谷歌它工作正常并返回名称,但对于Facebook它返回一个唯一的ID。我尝试了很多方法,但我无法从这个主要对象中获取名称。有人可以帮忙吗?

这是我的短片facebook配置:

accessTokenUri: https://graph.facebook.com/oauth/access_token
userAuthorizationUri: https://www.facebook.com/dialog/oauth
tokenName: oauth_token
authenticationScheme: query
clientAuthenticationScheme: form
userInfoUri: https://graph.facebook.com/me?fields=id,name,email

2 个答案:

答案 0 :(得分:0)

使用f_name代替name Facebook Graph API

答案 1 :(得分:0)

好的,我得到了解决方法:

    @RequestMapping(value = { "/user", "/me"}, method = RequestMethod.GET)
public Map<String, String> user(Principal principal) {
    Map<String, Object> details = (Map<String, Object>) ((OAuth2Authentication) principal).getUserAuthentication().getDetails();
    Map<String, String> map = new LinkedHashMap<>();
    map.put("name", (String) details.get("name"));
    map.put("email", (String) details.get("email"));
    return map;
}