当前位置: 首页 > 知识库问答 >
问题:

从GoogleIdToken获取用户配置文件

赵征
2023-03-14

我正在尝试这样做:

https://developers.google.com/identity/sign-in/web/backend-auth#calling-the-tokeninfo-endpoint

我用CLIENT_ID复制了粘贴的Java代码,但是除了用户标识、电子邮件和电子邮件验证之外,我无法获得任何更多的信息。idTokenString验证确定。还有其他人可以这样做吗?

我要求这些在OAuth 2.0游乐场:

https://www.googleapis.com/auth/plus.login

https://www.googleapis.com/auth/plus.me

https://www.googleapis.com/auth/userinfo.email

https://www.googleapis.com/auth/userinfo.profile

https://www.googleapis.com/auth/plus.moments.write

https://www.googleapis.com/auth/plus.profile.agerange.read

https://www.googleapis.com/auth/plus.profile.language.read

https://www.googleapis.com/auth/plus.circles.members.read

我想user.profile是我唯一需要的吗?

这是我的代码:

GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
                .setAudience(Arrays.asList(CLIENT_ID))
                .setIssuer("accounts.google.com")
                .build();

        GoogleIdToken idToken = verifier.verify(idTokenString);
        System.out.println("SUCCESS!");
        System.out.println(idToken);

        if (idToken != null) {
            GoogleIdToken.Payload payload = idToken.getPayload();

            // Print user identifier
            String userId = payload.getSubject();
            System.out.println("User ID: " + userId);

            // Get profile information from payload
            String email = payload.getEmail();
            boolean emailVerified = payload.getEmailVerified();
            String name = (String) payload.get("name");
            String pictureUrl = (String) payload.get("picture");
            String locale = (String) payload.get("locale");
            String familyName = (String) payload.get("family_name");
            String givenName = (String) payload.get("given_name");

            // Use or store profile information
            // ...
            System.out.println(email);
            System.out.println(emailVerified);
            System.out.println(name);
            System.out.println(pictureUrl);
            System.out.println(locale);
            System.out.println(familyName);
            System.out.println(givenName);


        } else {
            System.out.println("Invalid ID token.");
        }
    } catch (GeneralSecurityException | IOException e) {

        System.out.println("ERRRRO! Invalid ID token.");
    }

使用:JavaAPI客户端1.20.0

共有1个答案

秦权
2023-03-14

我今天在使用com.google.api客户端时遇到了同样的问题:google api客户端:1.22.0

但是我能够解决它。

当试图从OAuth2游乐场获取id令牌时,我注意到有这个请求

POST/oauth2/v4/token HTTP/1.1主机:www.googleapis.com

Google库有硬编码TOKEN_SERVER_URLGoogleOAuthConstance与值https://accounts.google.com/o/oauth2/token

为了修复它,我创建了以下类

public class GoogleAuthorizationCodeTokenV4Request extends GoogleAuthorizationCodeTokenRequest {


    public GoogleAuthorizationCodeTokenV4Request(HttpTransport transport, JsonFactory jsonFactory, String clientId, String
            clientSecret, String code, String redirectUri) {
        super(transport, jsonFactory, "https://www.googleapis.com/oauth2/v4/token", clientId, clientSecret,
            code, redirectUri);
    }
}

然后只是调用它,而不是原始的GoogleAuthorizationCodeTokenRequest

return new GoogleAuthorizationCodeTokenV4Request(new NetHttpTransport(), JacksonFactory.getDefaultInstance(),
                clientId, secret, authToken, callBack)
                .execute();

使用profilescope,所有信息(图片、名称等)都在id\u标记中

 类似资料:
  • 我想使用python检索我的个人资料图片,并将其显示在profiles.html上。 “...gif;base64,(variable)”alt=“profile”>? 我相信我需要改变(变量)响应,但我在转换它和我应该转换它到什么方面有困难。 以下是我尝试过的: profiles.html: graph_helper.py 此网站不能在以下数据处恢复网页:image/gif;base64,“,#

  • 是否有一种方法可以将“配置客户机”和访问文件定义为configClient.getResource(),而不是从url获取

  • 我正在使用spring云配置服务器 在我的一个应用程序中,我得到了一个存储在资源文件夹中的密钥存储: 我想得到密钥库。来自repo的jks,其中包含所有常规属性,如application。属性等。我的问题是: 1。我可以存储吗。git repo上的jks文件并将其提供给我的服务 2。如何确保该文件只转到相应的服务? 谢谢

  • 我刚刚将我们的Spring Boot项目从引导升级到v2.6.2,从Spring Cloud升级到2021.0.0。 现在,我的远程配置获取没有任何效果,应用程序也无法获取正确的属性文件 [main]INFO o. s. c. c. c. ConfigServiceProperty tySourceLocator-从服务器获取配置:http://localhost:8080 [main]WARN

  • 配置文件分为用户级配置和项目级配置。 用户级配置包含用户的环境及 UI 相关的选项,包括: 用户选项 中的所有内容。 扩展工具,包括已配置的扩展列表。 其他工具中的UI相关选项,例如 Target 组件下 站点地图 的选定视图。 项目级配置包含在特定目标应用程序上执行的工作相关的选项,包括: 项目选项中的所有内容。 单个Burp工具中的非UI相关选项,例如 代理 (Proxy) 和 扫描器 (Sc