승인 오류

인증 프로세스 중에 Google OAuth가 오류를 반환할 수 있습니다. 이 가이드를 사용하여 이 프로세스 중에 발생하는 가장 일반적인 오류를 해결하세요.

문제 해결

Google OAuth에 대해 자세히 알아보려면 OAuth 2.0을 사용하여 Google API에 액세스를 참고하세요.

갱신 토큰이 계속 만료됨

클라이언트 ID가 승인되지 않은 경우 7일 후에 갱신 토큰이 작동하지 않을 수 있습니다. 7일 토큰 만료는 상업용 또는 샌드박스 승인과 관련이 없습니다. 서비스 또는 사용자 계정의 OAuth 2.0 클라이언트 ID가 승인되고 프로덕션에 배치되어야 토큰 수명이 길어집니다. 자세한 내용은 갱신 토큰 만료를 참고하세요.

액세스가 거부됨

Google Cloud에서 OAuth 동의 화면을 설정했고 사용자 유형External인 경우 앱의 테스트 사용자로 등록되지 않은 Google 계정으로 계정 연결을 시도하면 '액세스 거부됨' 오류가 표시됩니다. OAuth 동의 화면테스트 사용자 섹션에 Google 계정을 추가해야 합니다.

파트너 연결 관리자 (PCM) 오류

PCM에 액세스할 때 발생하는 오류에 대한 도움말은 Partner Connections Manager (PCM) 오류 참조를 참고하세요.

Google에서 확인하지 않은 앱

SDM API는 제한된 범위를 사용합니다. 즉, 승인 중에 이 범위를 사용하는 앱은 OAuth API 확인이 완료되지 않는 한 '확인되지 않음'으로 표시됩니다. 개인용으로 Device Access 을 사용하는 경우 OAuth API 인증이 필요하지 않습니다.

인증 프로세스 중에 'Google에서 이 앱을 인증하지 않았습니다' 화면이 표시될 수 있습니다. 이 화면은 Google Cloud의 OAuth 동의 화면sdm.service 범위가 구성되지 않은 경우 표시됩니다. 고급 옵션을 클릭한 다음 프로젝트 이름으로 이동 (안전하지 않음)을 클릭하면 이 화면을 건너뛸 수 있습니다.

자세한 내용은 확인되지 않은 앱 화면을 참고하세요.

잘못된 클라이언트

액세스 또는 새로고침 토큰을 가져오려고 할 때 잘못된 OAuth 2.0 클라이언트 보안 비밀을 제공하면 '잘못된 클라이언트' 오류가 표시됩니다. 액세스 및 갱신 토큰 호출에 사용하는 client_secret 값이 Google Cloud 사용자 인증 정보 페이지에 표시된 OAuth 2.0 클라이언트 ID의 값인지 확인합니다.

잘못된 요청, 필수 범위가 누락됨

PCM에서 권한을 부여한 후 '필수 매개변수 범위가 누락됨'이라는 '잘못된 요청' 오류가 발생할 수 있습니다. 승인 호출에 사용하는 scope 값이 Google Cloud 사용자 인증 정보 페이지에 표시된 OAuth 2.0 클라이언트에 설정된 값과 동일한지 확인합니다.

리디렉션 URI 불일치

승인 절차를 진행할 때 '리디렉션 URI 불일치' 오류가 발생할 수 있습니다. 승인 호출에 사용하는 redirect_uri 값이 Google Cloud 사용자 인증 정보 페이지에 표시된 OAuth 2.0 클라이언트에 설정된 값과 동일한지 확인합니다.

빠른 참조

이 참조를 사용하여user 를 승인하고 Google 계정을 연결하는 단계를 빠르게 구현하세요.

이 빠른 참조를 사용하려면 코드 샘플의 각 자리표시자 변수를 특정 통합의 값으로 수정하고 필요에 따라 복사하여 붙여넣으세요.

1 PCM

앱에서 PCM 링크로 user 를 안내합니다. 다음을 대체하세요.

  1. project-id를 Device Access Project ID로 바꿉니다.
  2. oauth2-client-idGoogle Cloud 사용자 인증 정보의 OAuth2 클라이언트 ID로 바꿉니다.
  3. redirect-uri를 사용 중인 OAuth2 클라이언트 ID에 지정된 리디렉션 URI로 바꿉니다.
  4. scope: 사용 가능한 범위 중 하나
https://nestservices.google.com/partnerconnections/project-id/auth?redirect_uri=redirect-uri&access_type=offline&prompt=consent&client_id=oauth2-client-id&response_type=code&scope=https://www.googleapis.com/auth/scope

2 인증 코드

선택한 범위에 대해 PCM을 통해 권한을 부여하면 user 가 지정된 리디렉션 URI로 리디렉션됩니다. 승인 코드는 URL의 code 매개변수로 반환되며, 이 형식은 다음과 같아야 합니다.

redirect-uri?code=authorization-code&scope=https://www.googleapis.com/auth/scope

3 액세스 토큰

승인 코드를 사용하여 사용자를 대신하여 SDM API를 호출하는 데 사용할 수 있는 액세스 토큰을 가져옵니다.

Google의 OAuth 엔드포인트에 POST 호출을 실행하여 다음을 대체합니다.

  1. oauth2-client-idoauth2-client-secretGoogle Cloud 사용자 인증 정보의 OAuth2 클라이언트 ID 및 클라이언트 보안 비밀번호로 바꿉니다.
  2. authorization-code을 이전 단계에서 받은 코드로 바꿉니다.
  3. redirect-uri를 사용 중인 OAuth2 클라이언트 ID에 지정된 리디렉션 URI로 바꿉니다.

Google OAuth는 액세스 토큰과 갱신 토큰이라는 두 개의 토큰을 반환합니다.

요청

curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&code=authorization-code&grant_type=authorization_code&redirect_uri=redirect-uri'

응답

{
  "access_token": "access-token",
  "expires_in": 3599,
  "refresh_token": "refresh-token",
  "scope": "https://www.googleapis.com/auth/scope",
  "token_type": "Bearer"
}

4 API 호출

user의 액세스 토큰으로 API를 호출해야 인증이 완료됩니다. 이 초기 호출은 승인 프로세스를 완료하고 이벤트를 사용 설정합니다.

지정된 범위에 나열된 API 호출 중 하나를 사용하여 승인을 완료해야 합니다.

sdm.service

기기

자세한 내용은 devices.list API 참조를 확인하세요.

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

5. 갱신 토큰

SDM API의 액세스 토큰은 Google OAuth에서 반환된 expires_in 매개변수에 명시된 대로 1시간 동안만 유효합니다. 액세스 토큰이 만료되면 갱신 토큰을 사용하여 새 토큰을 가져옵니다.

Google의 OAuth 엔드포인트에 POST 호출을 실행하여 다음을 대체합니다.

  1. oauth2-client-idoauth2-client-secretGoogle Cloud 사용자 인증 정보의 OAuth2 클라이언트 ID 및 클라이언트 보안 비밀번호로 바꿉니다.
  2. refresh-token을 액세스 토큰을 처음 가져올 때 받은 코드로 바꿉니다.

Google OAuth에서 새 액세스 토큰을 반환합니다.

요청

curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&refresh_token=refresh-token&grant_type=refresh_token'

응답

{
  "access_token": "new-access-token",
  "expires_in": 3599,
  "scope": "https://www.googleapis.com/auth/scope",
  "token_type": "Bearer"
}