У запроса недостаточно областей аутентификации (Google Cloud Resource Manager) - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь позвонить менеджеру облачных ресурсов Google в проекте Angular и использую angular / fire для использования служб Firebase. Поэтому я использую метод авторизации angular / fire и аутентифицируюсь с помощью oAuth2 в google между всплывающим пользователем и возвращаю учетные данные и токены.

Когда я использую токен для вызова API, я получаю сообщение об ошибке:

"error":{"code":403,"message":"Request had insufficient authentication scopes.","status":"PERMISSION_DENIED"}}

Мой звонок ниже:

createProject(token): Observable<any>{


    const body = {
      "name": 'newAgent',
      "projectId": 'newAgent123',
      "labels": {
        "test": 'test'
      }
    }


    return this._http.post(`
      https://cloudresourcemanager.googleapis.com/v1/projects?
      access_token=${token}`,
      body
    )
  }

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Вы должны убедиться, что учетная запись службы, которую вы используете для аутентификации, имеет правильную область доступа .

Он должен иметь Область доступа к хранилищу данных (https://www.googleapis.com/auth/datastore), чтобы иметь возможность общаться с API Firestore. Вы можете прочитать больше здесь , как работает API Firestore .

Вы можете установить правильные области для своей служебной учетной записи, используя консоль на странице сведений о ВМ.

После изменения областей необходимо перезапустить экземпляр - иначе они не будут применены.

Подобный случай также обсуждался при переполнении стека здесь . Это может быть полезно.

0 голосов
/ 16 апреля 2020

Я нашел решение для проверки подлинности и получения правильных областей: ПЕРВЫЙ: Создайте всплывающее окно oAuth:

openPopup() 
  {
    const name = 'Authorization'
    const options = `width=${ 500 },height=${ 600 },left=${ 0 },top=${ 0 }`;
    const url = `
          https://accounts.google.com/o/oauth2/v2/auth?
          client_id=<CLIENT_ID>&
          response_type=code&
          include_granted_scopes=true&
          scope=https%3A//www.googleapis.com/auth/cloud-platform&
          redirect_uri=http://localhost&
          access_type=offline`;

    return window.open(url, name, options);
  }

ПОТОМ Проверьте код:

authApi(): Observable<any>{

    let headers = new HttpHeaders({
      'Content-Type': 'application/x-www-form-urlencoded'
    })

    let body = `
        code=<RESPONSE_CODE>&
        client_id=<CLIENT_ID>&
        client_secret=<CLIENT_SECRET>&
        grant_type=authorization_code&
        redirect_uri=http://localhost`;


    return this._http.post(`https://www.googleapis.com/oauth2/v4/token`,
    body, {headers: headers})
  }

НО СЕЙЧАС, КОГДА Я ПОПРОБУЙТЕ ИСПОЛЬЗОВАТЬ API отправляет мне эту ошибку

status: 0
statusText: "Unknown Error"
url: "https://cloudresourcemanager.googleapis.com/v1/projects"
ok: false
name: "HttpErrorResponse"
message: "Http failure response for https://cloudresourcemanager.googleapis.com/v1/projects: 0 Unknown Error"

ПОТОМУ ЧТО Я пытаюсь использовать API со следующей функцией

createProject( token ): Observable<any>{


    const headers = new HttpHeaders({
      'Content-Type': 'application/json',
      'X-Requested-With': 'XMLHttpRequest',
      'scope': 'https://www.googleapis.com/auth/cloud-platform',
      'Authorization': 'Bearer ${token}'
    })


    const body = {
      "name": 'newAgent',
      "projectId": 'newAgent123',
      "labels": {
        "test": 'test'
      }
    }


    return this._http.post(`https://cloudresourcemanager.googleapis.com/v1/projects`,
      body, { headers: headers }
    )
  }
...