Токен доступа Google API не имеет областей действия, хотя и предоставлен - PullRequest
0 голосов
/ 23 января 2019

Я пишу приложение для Android, которое запрашивает разрешения на доступ к API календаря Google. Я делаю это в два этапа. Во-первых, пользователь входит в систему, и предоставляется только доступ к профилю. Позже, когда пользователь хочет использовать календарь, он предоставляет доступ к областям API календаря.

Код аутентификации отправляется моему бэкэнд-серверу при входе в систему для получения его токена доступа и обновления токена.

В моей учетной записи Google разрешения для доступа к запрошенным областям также отображаются для моего приложения, но https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxxxxx сообщает мне для моего access_token, что оно имеет только следующие области: "scope": "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.profile"

Итак, порядок следующий: Я Войти, как это

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                //.requestIdToken(Constants.CLIENT_ID)
                .requestServerAuthCode(Constants.CLIENT_ID)
                .requestEmail()
                .build();
gSignIn = GoogleSignIn.getClient(UserSingleton.getInstance().getContext(), gso);
Intent signInIntent = gSignIn.getSignInIntent();
startActivityForResult(signInIntent, 1);

Это работает так, как должно, и я отправляю код аутентификации на свой сервер (node.js), где он обрабатывается следующим образом:

const oauth2Client = new google.auth.OAuth2(
    process.env.CLIENT_ID,
    process.env.CLIENT_SECRET,
    ""
  );

  const { tokens } = await oauth2Client.getToken(authcode).catch((err) => {
    console.log(err.response.data);
    throw new Error(err);
  });
  oauth2Client.setCredentials(tokens);
  //store tokens away

Затем, когда пользователь выполняет определенную задачу в приложении, его снова просят новые разрешения, как описано в этом руководстве google: https://developers.google.com/identity/sign-in/android/additional-scopes

if(!GoogleSignIn.hasPermissions(account, 
    new Scope("https://www.googleapis.com/auth/calendar"),
    new Scope("https://www.googleapis.com/auth/calendar.readonly"),
    new Scope("https://www.googleapis.com/auth/calendar.events"),
    new Scope("https://www.googleapis.com/auth/calendar.events.readonly"))
  ){                       
 GoogleSignIn.requestPermissions((MainActivity)UserSingleton.getInstance().getContext(), 3, account,
    new Scope("https://www.googleapis.com/auth/calendar"),
    new Scope("https://www.googleapis.com/auth/calendar.readonly"),
    new Scope("https://www.googleapis.com/auth/calendar.events"),
    new Scope("https://www.googleapis.com/auth/calendar.events.readonly"));
}

Моя учетная запись Google теперь сообщает, что разрешения предоставлены, но доступ не работает с токеном доступа. Мне кажется, что я искал ответ по всему Интернету, поэтому очень надеюсь, что кто-нибудь сможет мне помочь. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...