Проблема при получении информации о Google+ Circle с помощью Google+ Domain API

Я занимаюсь разработкой небольшого веб-приложения, в котором я интегрируюсь с API-интерфейсами Домена Google+. Я использую аутентификацию OAuth2. Я сгенерировал client_id и client_secret для своего веб-приложения из консоли Google API. Используя API Домена Google+, я могу создать токен доступа.

  1. Генерация 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);
    
  2. После авторизации

     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();
    
  3. Получение информации о круге:

    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+ Domain API в моей консоли Google API. REDIRECT_URI ="http://localhost:8080/DomainWebApp/oauth2callback" так как это веб-приложение. Какие-либо предложения?

1 ответ

Первое, что нужно проверить, это то, что приложение звонит от имени пользователя Служб Google. Если учетная запись пользователя является, например, учетной записью @gmail, запрос не будет разрешен. API доменов Google+ работает только для пользователей домена Служб Google и только для запросов в их домене.

Другие вопросы по тегам