Токен доступа для API Google Classroom говорит, что он авторизован API класса, но в запросе rest api отсутствуют учетные данные - PullRequest
0 голосов
/ 30 мая 2019

У меня есть приложение для реагирования на ошибки, которое регистрирует пользователей с помощью Firebase Web SDK. Приложение успешно регистрирует пользователей, и при входе пользователям предлагается авторизовать API Google Classroom, используя следующие области: ['profile', 'email', "https://www.googleapis.com/auth/classroom.courses", "https://www.googleapis.com/auth/classroom.courses.readonly"]

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

Я попытался включить токен доступа в заголовок и URL-адрес напрямую.

Как я могу подписать своих пользователей:

(onSignIn вручную регистрирует пользователя на firebase, используя предоставленный ими код руководства firebase)

googleAuth = async () => {
    try {
      const result = await Expo.Google.logInAsync({
        iosClientId : "MY IOS CLIENT ID IS ACTUALLY SET IN MY CODE",
        scopes : ['profile', 'email', "https://www.googleapis.com/auth/classroom.courses", "https://www.googleapis.com/auth/classroom.courses.readonly"],
        behavior : 'web'
      })

      if(result.type === 'success') {
        this.onSignIn(result)
        console.log(result)
      }
    }
    catch(e) {
      console.log("ERROR", e)
    }
  }

Однажды направленный на приборную панель:

listCourses = async (auth) => {
    if(firebase.auth().currentUser) {

      const token = await firebase.auth().currentUser.getIdToken()
      .then(tkn => {
        return tkn
      })
      .catch(err => {
        console.log(err)
        return undefined;
      })

      if(token) {
        fetch("https://classroom.googleapis.com/v1/courses?accessToken=" + token, {
          method : "GET",
        })
        .catch(err => {
          console.log(err)
        })
        .then(res => {
          console.log(res)
        })
      }
    }
  }

Я ожидал получить список классов, аналогичный тому, что произошло, когда я проходил аутентификацию с использованием клиента Oauth2.0 в API отдыха в классе Google (я получил 200 запросов с курсами в массиве) На самом деле я получил эту ошибку:

401 error
\"message\": \"Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.\",
"url": "https://classroom.googleapis.com/v1/courses?accessToken=MY ACTUAL ACCESS TOKEN",

1 Ответ

0 голосов
/ 31 мая 2019

Идентификационный токен и токен доступа - это разные вещи.Идентификационный токен содержит информацию о пользователе в формате JWT, а токен доступа - это непрозрачная строка, которую вы отправляете вместе с будущим запросом.Более подробная информация о Firebase Войти через Google доступна здесь:

https://firebase.google.com/docs/auth/web/google-signin

...