Какие заголовки нужно использовать, чтобы использовать API Google - PullRequest
0 голосов
/ 16 апреля 2020

Я думаю, что мне нужно больше заголовков для использования Google Cloud Resource Manager API. Это процесс, которому я следую, чтобы аутентифицироваться и получать разрешения. Но теперь API не отправляет мне объясненную ошибку.

FIRST: создайте всплывающее окно 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);
  }

THEN Проверьте код:

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 }
    )
  }


1 Ответ

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

уже есть javascript библиотека , которая справится со всем этим для вас простым способом. он также поддерживает различные способы аутентификации: OAuth2, сервис к сервису и ключ API . для oauth2, который является вашим случаем, это может быть как:

const oauth2Client = new google.auth.OAuth2(
  YOUR_CLIENT_ID,
  YOUR_CLIENT_SECRET,
  YOUR_REDIRECT_URL
);
// a get request to this url that will send you back the code
const url = oauth2Client.generateAuthUrl({
  // 'online' (default) or 'offline' (gets refresh_token)
  access_type: 'offline',

  // If you only need one scope you can pass it as a string
  scope: [] // the needed list of scopes
});

// use the code to get the tokens
const {tokens} = await oauth2Client.getToken(code)
oauth2Client.setCredentials(tokens);

Теперь для API менеджера ресурсов, вы можете проверить этот пример здесь

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