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

使用Google+域API获取Google+圈子信息时出现问题

巫新知
2023-03-14

我正在开发一个小型web应用程序,其中我与Google+域API集成。我正在使用OAuth2身份验证,我已经从Google API控制台为我的web应用程序生成了client_id和client_secret。使用Google+域API,我可以生成访问令牌。

>

  • 正在生成授权URL

    List<String> SCOPE = Arrays.asList(
    "https://www.googleapis.com/auth/plus.me",
    "https://www.googleapis.com/auth/plus.circles.read",
    "https://www.googleapis.com/auth/plus.stream.write");
    
    //Sets up Authorization COde flow
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(new NetHttpTransport(),
        new JacksonFactory(),
        "xxx","yyy",SCOPE).setApprovalPrompt("force").setAccessType("offline").build();
    
    //Builds the uthorization URL
    String url = flow.newAuthorizationUrl().setRedirectUri(<REDIRECT_URI>).build();
    out.println("<div id='googleplus'></div><a href='"+url+"' rel='external' ><img src='googleplus.jpg'></a> <b>Configure</b></div>");
    session.setAttribute("CodeFlow", flow);
    

    授权后

     GoogleAuthorizationCodeFlow flow=(GoogleAuthorizationCodeFlow)session.  getAttribute("CodeFlow");
    
    //After authorization,fetches the value of code parameter
    String authorizationCode=request.getParameter("code");
    
    //Exchanges the authorization code to get the access token
    GoogleTokenResponse tokenResponse=flow.newTokenRequest(authorizationCode).
        setRedirectUri(<REDIRECT_URI>).execute();
    
    GoogleCredential credential = new GoogleCredential.Builder().setTransport(new  NetHttpTransport()).setJsonFactory(new JacksonFactory())
    .setClientSecrets("xxx", "yyy")
    .addRefreshListener(new CredentialRefreshListener(){
    
        public void onTokenErrorResponse(Credential credential, TokenErrorResponse errorResponse) throws java.io.IOException{
            System.out.println("Credential was not refreshed successfully. "
                    + "Redirect to error page or login screen.");
    
        }
    
    
        @Override
        public void onTokenResponse(Credential credential, TokenResponse tokenResponse)
                throws IOException {
            System.out.println("Credential was refreshed successfully.");
             System.out.println("Refresh Token :"+tokenResponse.getRefreshToken());
    
        }
    }).build();
    
    //Set authorized credentials.
    credential.setFromTokenResponse(tokenResponse);
    credential.refreshToken();
    

    正在提取圆圈信息:

    PlusDomains plusDomains = new PlusDomains.Builder(
            new NetHttpTransport(), new JacksonFactory(), credential)
            .setApplicationName("DomainWebApp")
            .setRootUrl("https://www.googleapis.com/")
            .build();
    PlusDomains.Circles.List listCircles=plusDomains.circles().list("me");
    listCircles.setMaxResults(5L);
    System.out.println("Circle URL:"+listCircles.buildHttpRequestUrl());
    CircleFeed circleFeed=listCircles.execute();
    System.out.println("Circle feed:"+circleFeed);
    List<Circle> circles =circleFeed.getItems();
    
    while (circles != null) {
          for (Circle circle : circles) {
              out.println("Circle name : "+circle.getDisplayName()+" Circle id : "+circle.getId());
          }
    
          // When the next page token is null, there are no additional pages of
          // results. If this is the case, break.
          if (circleFeed.getNextPageToken() != null) {
            // Prepare the next page of results
            listCircles.setPageToken(circleFeed.getNextPageToken());
    
            // Execute and process the next page request
            circleFeed = listCircles.execute();
            circles = circleFeed.getItems();
          } else {
            circles = null;
          }
        }
    
    com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
    {
      "code" : 403,
      "errors" : [ {
        "domain" : "global",
        "message" : "Forbidden",
        "reason" : "forbidden"
      } ],
      "message" : "Forbidden"
    }
        com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
        com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
    

    注意:我还在我的Google API控制台中启用了Google+域API。redirect_uri=“http://localhost:8080/domainwebapp/oauth2callback”因为它是一个web应用程序。有什么建议吗?

  • 共有1个答案

    朱宇航
    2023-03-14

    首先要检查的是该应用程序是否代表Google Apps用户进行调用。例如,如果用户帐户是@Gmail帐户,则将不允许该请求。Google+Domains API仅适用于Google Apps域用户,并且仅适用于其域内的请求。

     类似资料:
    • 我只是想制作一个小而简单的应用程序(两年前我已经在Objective-C和api V1中制作了这个应用程序),它显示一个屏幕,上面有事件时间和描述,还有一个按钮:“在日历中插入事件”。显然,每个用户都必须用自己的谷歌用户名和密码配置应用程序。该应用程序使用第一个可用日历简化了一些过程。 我在尝试使用javascript时遇到了无限的问题(这个应用程序将用html5制作),所以,看看文档,我最终尝试

    • 问题内容: 我得到的错误: 下面的代码,我正在使用: 直到这里,我得到了刷新令牌,访问令牌等 它在以下行失败:(不知道,为什么?) 我在网上搜索过,但很少看到它的示例和稀有资料。任何机构都有想法吗? 我究竟做错了什么? 问题答案: 我猜 credential.getRequestInitializer() 为空。 我已经通过将自定义请求初始化程序设置为凭证对象来解决了此问题 Google的文档规定

    • 我正在使用谷歌OAuth API使用此网址获取用户信息 使用示波器 https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email 我得到了以下回应 我正在寻找电子邮件,但无法回复。

    • 我是谷歌应用程序帐户用户。当我尝试访问谷歌加域API时,我收到此错误。“不允许访问谷歌域名API,因为用户已同意不兼容的范围”。我请求的范围是:“https://www.googleapis.com/auth/plus.circles.read,https://www.googleapis.com/auth/plus.circles.write,https://www.googleapis.com