채팅 앱 및 Google Chat API 요청을 인증하고 승인합니다.

인증과 승인은 각각 ID와 리소스 액세스를 확인하는 데 사용되는 메커니즘입니다. 이 문서에서는 Chat 앱 및 Chat API 요청의 인증 및 승인 작동 방식을 간략하게 설명합니다.

프로세스 개요

다음 다이어그램은 Google Chat의 인증 및 승인에 관한 대략적인 단계를 보여줍니다.

Google Chat 인증 및 승인에 관한 개략적인 단계
그림 1. Google Chat 인증 및 승인의 대략적인 단계

  1. Google Cloud 프로젝트 구성, Chat API 사용 설정, Chat 앱 구성: 개발 중에 Google Cloud 프로젝트를 만듭니다. Google Cloud 프로젝트에서 Chat API를 사용 설정하고, Chat 앱을 구성하고, 인증을 설정합니다. 자세한 내용은 Google Workspace에서 개발하기Chat 앱 빌드하기를 참고하세요.

  2. Chat API 호출: 앱이 Chat API를 호출하면 인증 사용자 인증 정보를 Chat API에 전송합니다. 앱이 서비스 계정으로 인증하는 경우 사용자 인증 정보가 앱 코드의 일부로 전송됩니다. 앱에서 아직 부여되지 않은 사용자 인증을 사용하여 Chat API를 호출해야 하는 경우 사용자에게 로그인하라는 메시지가 표시됩니다.

  3. 리소스 요청: 앱이 인증을 설정할 때 지정한 범위로 액세스를 요청합니다.

  4. 동의 요청: 앱이 사용자로 인증되는 경우 사용자가 요청된 데이터에 대한 액세스 권한을 앱에 부여할지 여부를 결정할 수 있도록 Google에서 OAuth 동의 화면을 표시합니다. 서비스 계정을 사용한 인증에는 사용자 동의가 필요하지 않습니다.

  5. 승인된 리소스 요청 전송: 사용자가 승인 범위에 동의하면 앱은 사용자 인증 정보와 사용자가 승인한 범위를 요청에 번들로 묶습니다. 액세스 토큰을 획득하기 위해 요청이 Google 승인 서버로 전송됩니다.

  6. Google에서 액세스 토큰을 반환함: 액세스 토큰에는 부여된 범위 목록이 포함됩니다. 반환된 범위 목록이 요청된 범위보다 제한적인 경우 앱은 토큰으로 제한된 기능을 사용 중지합니다.

  7. 요청된 리소스에 액세스: 앱은 Google의 액세스 토큰을 사용하여 Chat API를 호출하고 Chat API 리소스에 액세스합니다.

  8. 갱신 토큰 가져오기 (선택사항): 앱이 단일 액세스 토큰의 수명을 넘어 Google Chat API에 액세스해야 하는 경우 갱신 토큰을 가져올 수 있습니다. 자세한 내용은 OAuth 2.0을 사용하여 Google API에 액세스하기를 참고하세요.

  9. 더 많은 리소스 요청: 앱에 더 많은 액세스 권한이 필요한 경우 사용자에게 새 범위를 부여하도록 요청하여 액세스 토큰을 가져오는 새 요청이 발생합니다(3~6단계).

채팅 앱에 인증이 필요한 경우

채팅 앱은 사용자 상호작용에 대한 응답으로 또는 비동기적으로 메시지를 보낼 수 있습니다. 또한 Chat 스페이스를 만들거나 Chat 스페이스의 사용자 목록을 가져오는 등 사용자를 대신하여 작업을 완료할 수 있습니다.

Chat 앱은 응답을 처리하는 동안 Chat API 또는 다른 Google API를 호출하지 않는 한 사용자 상호작용에 응답하기 위해 인증이 필요하지 않습니다.

비동기 메시지를 보내거나 사용자를 대신하여 작업을 실행하기 위해 Chat 앱은 인증 및 승인이 필요한 Chat API에 RESTful 요청을 합니다.

사용자 상호작용에 대한 응답에는 인증이 필요하지 않습니다.

Google Chat 앱은 상호작용 이벤트를 동기식으로 수신하고 응답하기 위해 사용자 또는 Chat 앱으로 인증할 필요가 없습니다.

사용자가 다음과 같은 Chat 앱과 상호작용하거나 Chat 앱을 호출할 때마다 Google Chat 앱은 상호작용 이벤트를 수신합니다.

  • 사용자가 Chat 앱으로 메시지를 보냅니다.
  • 사용자가 Chat 앱을 @멘션합니다.
  • 사용자가 Chat 앱의 명령어 중 하나를 호출합니다.

다음 다이어그램은 Chat 사용자와 Chat 앱 간의 요청-응답 시퀀스를 보여줍니다.

채팅 앱 상호작용 이벤트에는 승인이 필요하지 않음
그림 2. Chat 앱 상호작용 이벤트에는 인증이 필요하지 않습니다.

  1. 사용자가 Google Chat에서 Chat 앱으로 메시지를 보냅니다.
  2. Google Chat에서 메시지를 앱으로 전달합니다.
  3. 앱은 메시지를 수신하고 처리한 후 Google Chat에 응답을 반환합니다.
  4. Google Chat은 사용자 또는 스페이스에 대한 응답을 렌더링합니다.

이 시퀀스는 각 채팅 앱 상호작용 이벤트에 대해 반복됩니다.

비동기 메시지에 인증 필요

비동기 메시지는 Chat 앱이 인증 및 승인이 필요한 Chat API에 요청할 때 발생합니다.

Chat API를 호출하면 Chat 앱이 Google Chat에 메시지를 게시하거나 사용자를 대신하여 작업을 완료하고 데이터에 액세스할 수 있습니다. 예를 들어 서버 다운을 감지한 후 채팅 앱은 Chat API를 호출하여 다음 작업을 할 수 있습니다.

  • 서비스 중단을 조사하고 해결하기 위한 Chat 스페이스를 만듭니다.
  • Chat 스페이스에 사용자를 추가합니다.
  • Chat 스페이스에 메시지를 게시하여 서비스 중단에 관한 세부정보를 제공합니다.

다음 다이어그램은 채팅 앱과 채팅 스페이스 간의 비동기 메시지 시퀀스를 보여줍니다.

비동기 메시지에 인증 필요
그림 3. 비동기 메시지에는 인증이 필요합니다.

  1. Chat 앱은 spaces.messages.create 메서드를 사용하여 Chat API를 호출하여 메시지를 만들고 HTTP 요청에 사용자 인증 정보를 포함합니다.
  2. Google Chat은 서비스 계정 또는 사용자 인증 정보로 Chat 앱을 인증합니다.
  3. Google Chat이 지정된 Chat 스페이스에 앱의 메시지를 렌더링합니다.

Chat API 범위

OAuth 동의 화면 구성 및 범위 선택을 통해 사용자 및 앱 검토자에게 표시되는 정보를 정의하고 나중에 게시할 수 있도록 앱을 등록합니다.

앱에 부여된 액세스 수준을 정의하려면 승인 범위를 식별하고 선언해야 합니다. 승인 범위는 Google Workspace 앱 이름, 액세스하는 데이터 종류, 액세스 수준이 포함된 OAuth 2.0 URI 문자열입니다.

민감하지 않은 범위

범위 코드 설명
https://www.googleapis.com/auth/chat.bot

Chat 앱이 채팅을 보고 메시지를 보낼 수 있도록 합니다.

이 범위는 서비스 계정을 사용한 앱 인증만 지원합니다. 이 범위를 사용하면 사용자 인증 정보 또는 도메인 전체 위임으로 인증할 수 없습니다.

민감한 범위

범위 코드 설명
https://www.googleapis.com/auth/chat.spaces Chat에서 대화 및 스페이스를 만들고 메타데이터 (기록 설정 및 액세스 설정 포함)를 보거나 수정합니다.
https://www.googleapis.com/auth/chat.spaces.create Chat에서 새 대화를 만듭니다.
https://www.googleapis.com/auth/chat.spaces.readonly Chat에서 채팅 및 스페이스를 확인합니다.
https://www.googleapis.com/auth/chat.memberships Chat 대화에서 참여자를 확인, 추가, 업데이트, 삭제합니다.
https://www.googleapis.com/auth/chat.memberships.app Google Chat의 대화에서 자체적으로 추가 및 삭제
https://www.googleapis.com/auth/chat.memberships.readonly Chat 대화 참여자 보기
https://www.googleapis.com/auth/chat.messages.create Chat에서 메시지를 작성하고 보냅니다.
https://www.googleapis.com/auth/chat.messages.reactions Chat에서 메시지에 대한 반응 보기, 추가, 삭제
https://www.googleapis.com/auth/chat.messages.reactions.create Chat에서 메시지에 반응을 추가합니다.
https://www.googleapis.com/auth/chat.messages.reactions.readonly Chat에서 메시지에 대한 반응을 확인합니다.
https://www.googleapis.com/auth/chat.users.readstate Chat 대화의 마지막으로 읽은 시간 확인 및 수정
https://www.googleapis.com/auth/chat.users.readstate.readonly Chat 대화를 마지막으로 읽은 시간 보기
https://www.googleapis.com/auth/chat.admin.spaces.readonly Chat에서 관리자 도메인이 소유한 채팅 및 스페이스를 볼 수 있습니다.
https://www.googleapis.com/auth/chat.admin.spaces Chat에서 관리자 도메인이 소유한 채팅 및 스페이스를 보거나 수정합니다.
https://www.googleapis.com/auth/chat.admin.memberships.readonly Chat에서 관리자 도메인이 소유한 대화의 참여자 및 관리자를 볼 수 있습니다.
https://www.googleapis.com/auth/chat.admin.memberships Chat에서 관리자 도메인이 소유한 대화의 참여자 및 관리자를 확인, 추가, 업데이트, 삭제합니다.
https://www.googleapis.com/auth/chat.app.spaces

Chat에서 대화 및 스페이스를 만들고 메타데이터 (기록 설정 및 액세스 설정 포함)를 보거나 업데이트합니다. 관리자 승인이 필요합니다.

이 범위는 서비스 계정을 사용한 앱 인증만 지원합니다. 이 범위를 사용하면 사용자 인증 정보 또는 도메인 전체 위임으로 인증할 수 없습니다.

https://www.googleapis.com/auth/chat.app.spaces.create

Chat에서 새 대화 및 스페이스를 만듭니다. 관리자 승인이 필요합니다.

이 범위는 서비스 계정을 사용한 앱 인증만 지원합니다. 이 범위를 사용하면 사용자 인증 정보 또는 도메인 전체 위임으로 인증할 수 없습니다.

https://www.googleapis.com/auth/chat.app.memberships

Chat의 대화 및 스페이스에서 참여자를 확인, 추가, 업데이트, 삭제합니다. 관리자 승인이 필요합니다.

이 범위는 서비스 계정을 사용한 앱 인증만 지원합니다. 이 범위를 사용하면 사용자 인증 정보 또는 도메인 전체 위임으로 인증할 수 없습니다.

https://www.googleapis.com/auth/chat.customemojis Chat에서 맞춤 이모티콘을 보고 만들고 삭제합니다.
https://www.googleapis.com/auth/chat.customemojis.readonly Chat에서 맞춤 그림 이모티콘을 확인합니다.
https://www.googleapis.com/auth/chat.users.spacesettings Chat 사용자 스페이스 설정을 보고 업데이트합니다.

제한된 범위

범위 코드 설명
https://www.googleapis.com/auth/chat.delete Chat에서 대화 및 스페이스를 삭제하고 연결된 파일에 대한 액세스 권한을 삭제합니다.
https://www.googleapis.com/auth/chat.import 스페이스, 메시지, 멤버십을 Chat으로 가져옵니다. 자세한 내용은 Chat 앱이 데이터를 가져오도록 승인하기를 참고하세요.
https://www.googleapis.com/auth/chat.messages 메시지 보기, 작성, 전송, 업데이트, 삭제 및 메시지에 대한 반응 추가, 보기, 삭제
https://www.googleapis.com/auth/chat.messages.readonly Chat에서 메시지와 반응을 확인합니다.
https://www.googleapis.com/auth/chat.admin.delete 관리자 도메인에서 소유한 대화 및 스페이스를 삭제하고 Chat에서 연결된 파일에 대한 액세스 권한을 삭제합니다.
https://www.googleapis.com/auth/chat.app.delete

Chat에서 대화 및 스페이스를 삭제하고 연결된 파일에 대한 액세스 권한을 삭제합니다. 관리자 승인이 필요합니다.

이 범위는 서비스 계정을 사용한 앱 인증만 지원합니다. 이 범위를 사용하면 사용자 인증 정보 또는 도메인 전체 위임으로 인증할 수 없습니다.

위 표의 범위는 다음 정의에 따라 민감도를 나타냅니다.

앱에 다른 Google API에 대한 액세스 권한이 필요한 경우 해당 범위도 추가할 수 있습니다. Google API 범위에 대한 자세한 내용은 OAuth 2.0을 사용하여 Google API에 액세스하기를 참고하세요.

Google Workspace API의 범위에 대해 자세히 알아보려면 OAuth 동의 화면 구성 및 범위 선택을 참고하세요.

필수 인증 유형

Chat 앱이 Chat API로 인증 및 승인하는 방법에는 두 가지가 있습니다.

사용자 인증
사용자 인증을 사용하면 채팅 앱이 사용자 데이터에 액세스하고 사용자 대신 작업을 완료할 수 있습니다. OAuth 범위는 승인된 데이터와 작업을 지정합니다. Chat 앱이 관리자가 설치했거나 도메인 전체 위임이 부여되지 않은 경우 Chat 앱이 사용자를 대신하여 처음으로 작업을 실행할 때 사용자는 OAuth 동의 화면을 사용하여 Chat 앱을 승인해야 합니다.
앱 인증

앱 인증을 사용하면 Chat 앱이 서비스 계정 사용자 인증 정보를 사용하고 데이터에 액세스하며 자체적으로 작업을 완료할 수 있습니다. Chat 앱은 자체 사용자 인증 정보를 사용하여 리소스에 액세스하고 리소스와 상호작용하므로 최종 사용자는 Chat 앱의 API 호출을 승인할 필요가 없으며 앱 승인을 지원하는 OAuth 승인 범위를 OAuth 동의 화면에 추가할 수 없습니다.

다음 두 가지 유형의 OAuth 승인 범위가 앱 인증을 지원합니다.

  • https://www.googleapis.com/auth/chat.bot: 채팅 앱은 이 승인 범위를 지원하는 Google Chat API 메서드를 호출하여 최종 사용자가 채팅 앱을 추가한 스페이스의 메시지와 같이 액세스할 수 있는 리소스를 만들거나, 업데이트하거나, 가져오거나, 나열하거나, 삭제할 수 있습니다. Chat 앱은 이 승인 범위를 자체적으로 부여할 수 있으며, 관리자 또는 최종 사용자 승인이 필요하지 않습니다.
  • https://www.googleapis.com/auth/chat.app.*(개발자 미리보기): 이러한 범위를 사용하려면 일회성 관리자 승인이 필요합니다. 관리자 승인을 받으려면 Google Workspace Marketplace 호환 OAuth 클라이언트를 만들고 Google Workspace Marketplace SDK에서 앱을 구성하여 관리자 승인을 받을 수 있도록 Chat 앱의 서비스 계정을 준비합니다. 이러한 범위를 사용하면 Chat 앱이 특정 Google Chat API 메서드를 호출할 수 있습니다. 예를 들어 chat.app.spaces.create를 사용하면 앱에서 Chat 스페이스를 만들 수 있습니다.

메서드가 사용자 또는 앱 인증을 모두 지원하는 경우 Chat API는 사용하는 인증 유형에 따라 다른 결과를 반환합니다.

  • 앱 인증을 사용하면 메서드는 채팅 앱이 액세스할 수 있는 리소스만 반환합니다.
  • 사용자 인증을 사용하면 메서드는 사용자가 액세스할 수 있는 리소스만 반환합니다.

예를 들어 앱 승인으로 spaces.list() 메서드를 호출하면 Chat 앱이 속한 스페이스 목록이 반환됩니다. 사용자 승인으로 spaces.list()를 호출하면 사용자가 속한 스페이스 목록이 반환됩니다. 실제로 Chat 앱의 설계와 기능에 따라 Chat API를 호출할 때 두 가지 유형의 인증을 모두 사용할 수 있습니다.

비동기 채팅 API 호출

다음 표에는 Chat API 메서드와 지원되는 승인 범위가 나와 있습니다.

메서드 사용자 인증 지원 앱 인증 지원 지원되는 승인 범위
스페이스  
스페이스 만들기 사용자 인증:
  • chat.spaces.create
  • chat.spaces
  • chat.import
앱 인증관리자 승인 (개발자 미리보기에서 사용 가능)을 사용하는 경우:
  • chat.app.spaces.create
  • chat.app.spaces
스페이스 설정하기 사용자 인증:
  • chat.spaces.create
  • chat.spaces
스페이스 받기 사용자 인증:
  • chat.spaces.readonly
  • chat.spaces
관리자 권한을 사용하는 사용자 인증:
  • chat.admin.spaces.readonly
앱 인증을 사용하는 경우:
  • chat.bot
앱 인증관리자 승인 (개발자 미리보기에서 사용 가능)을 사용하는 경우:
  • chat.app.spaces
스페이스 나열 사용자 인증:
  • chat.spaces.readonly
  • chat.spaces
앱 인증을 사용하는 경우:
  • chat.bot
검색 공간 관리자 권한을 사용하는 사용자 인증:
  • chat.admin.spaces.readonly
스페이스 업데이트 사용자 인증:
  • chat.spaces
  • chat.import
관리자 권한을 사용하는 사용자 인증:
  • chat.admin.spaces
앱 인증관리자 승인 (개발자 미리보기에서 사용 가능)을 사용하는 경우:
  • chat.app.spaces
스페이스 삭제하기 사용자 인증:
  • chat.delete
  • chat.import
관리자 권한을 사용하는 사용자 인증:
  • chat.admin.delete
앱 인증관리자 승인 (개발자 미리보기에서 사용 가능)을 사용하는 경우:
  • chat.app.delete
스페이스 가져오기 프로세스 완료하기 사용자 인증:
  • chat.import
채팅 메시지 찾기 사용자 인증:
  • chat.spaces.readonly
  • chat.spaces
앱 인증을 사용하는 경우:
  • chat.bot
구성원  
회원 만들기 사용자 인증:
  • chat.memberships
  • chat.memberships.app
  • chat.import
관리자 권한을 사용하는 사용자 인증:
  • chat.admin.memberships
앱 인증관리자 승인 (개발자 미리보기에서 사용 가능)을 사용하는 경우:
  • chat.app.memberships
멤버 가져오기 사용자 인증:
  • chat.memberships.readonly
  • chat.memberships
앱 인증을 사용하는 경우:
  • chat.bot
관리자 권한을 사용하는 사용자 인증:
  • chat.admin.memberships.readonly
구성원 나열 사용자 인증:
  • chat.memberships.readonly
  • chat.memberships
  • chat.import
앱 인증을 사용하는 경우:
  • chat.bot
관리자 권한을 사용하는 사용자 인증:
  • chat.admin.memberships.readonly
회원 삭제하기 사용자 인증:
  • chat.memberships
  • chat.memberships.app
  • chat.import
관리자 권한을 사용하는 사용자 인증:
  • chat.admin.memberships
앱 인증관리자 승인 (개발자 미리보기에서 사용 가능)을 사용하는 경우:
  • chat.app.memberships
회원 업데이트 사용자 인증:
  • chat.memberships
  • chat.import
관리자 권한을 사용하는 사용자 인증:
  • chat.admin.memberships
앱 인증관리자 승인 (개발자 미리보기에서 사용 가능)을 사용하는 경우:
  • chat.app.memberships
메시지  
메시지 만들기 사용자 인증:
  • chat.messages.create
  • chat.messages
  • chat.import
앱 인증을 사용하는 경우:
  • chat.bot
메시지 받기 사용자 인증:
  • chat.messages.readonly
  • chat.messages
앱 인증을 사용하는 경우:
  • chat.bot
메시지 나열 사용자 인증:
  • chat.messages.readonly
  • chat.messages
  • chat.import
메시지 업데이트하기 사용자 인증:
  • chat.messages
  • chat.import
앱 인증을 사용하는 경우:
  • chat.bot
메시지 삭제하기 사용자 인증:
  • chat.messages
  • chat.import
앱 인증을 사용하는 경우:
  • chat.bot
리액션  
리액션 만들기 사용자 인증:
  • chat.messages.reactions.create
  • chat.messages.reactions
  • chat.messages
  • chat.import
반응 나열 사용자 인증:
  • chat.messages.reactions.readonly
  • chat.messages.reactions
  • chat.messages.readonly
  • chat.messages
반응 삭제하기 사용자 인증:
  • chat.messages.reactions
  • chat.messages
  • chat.import
맞춤 그림 이모티콘  
맞춤 이모티콘 만들기 사용자 인증:
  • chat.customemojis
맞춤 이모티콘 삭제하기 사용자 인증:
  • chat.customemojis
맞춤 그림 이모티콘 받기 사용자 인증:
  • chat.customemojis
  • chat.customemojis.readonly
맞춤 그림 이모티콘 나열 사용자 인증:
  • chat.customemojis
  • chat.customemojis.readonly
미디어 및 첨부파일  
미디어를 파일 첨부로 업로드하기 사용자 인증:
  • chat.messages.create
  • chat.messages
  • chat.import
미디어 다운로드 사용자 인증:
  • chat.messages.readonly
  • chat.messages
앱 인증을 사용하는 경우:
  • chat.bot
메일 첨부파일 가져오기 앱 인증을 사용하는 경우:
  • chat.bot
사용자 읽기 상태
사용자의 스페이스 읽기 상태 가져오기 사용자 인증:
  • chat.users.readstate
  • chat.users.readstate.readonly
사용자의 스페이스 읽기 상태 업데이트 사용자 인증:
  • chat.users.readstate
사용자의 스레드 읽기 상태 가져오기 사용자 인증:
  • chat.users.readstate
  • chat.users.readstate.readonly
사용자 스페이스 설정
사용자의 스페이스 알림 설정 가져오기 사용자 인증:
  • chat.users.spacesettings
사용자의 스페이스 알림 설정 업데이트 사용자 인증:
  • chat.users.spacesettings
스페이스 이벤트
스페이스 이벤트 가져오기 사용자 인증을 사용하는 경우 이벤트 유형에 기반한 범위를 사용해야 합니다.
  • 메시지에 관한 이벤트의 경우:
    • chat.messages
    • chat.messages.readonly
  • 반응에 관한 이벤트의 경우:
    • chat.messages.reactions
    • chat.messages.reactions.readonly
    • chat.messages
    • chat.messages.readonly
  • 멤버십에 관한 이벤트의 경우:
    • chat.memberships
    • chat.memberships.readonly
  • 스페이스에 관한 이벤트:
    • chat.spaces
    • chat.spaces.readonly
스페이스 이벤트 나열 사용자 인증을 사용하는 경우 요청에 포함된 각 이벤트 유형의 범위를 사용해야 합니다.
  • 메시지에 관한 이벤트의 경우:
    • chat.messages
    • chat.messages.readonly
  • 반응에 관한 이벤트의 경우:
    • chat.messages.reactions
    • chat.messages.reactions.readonly
    • chat.messages
    • chat.messages.readonly
  • 멤버십에 관한 이벤트의 경우:
    • chat.memberships
    • chat.memberships.readonly
  • 스페이스에 관한 이벤트:
    • chat.spaces
    • chat.spaces.readonly

Chat 앱 상호작용 이벤트

다음 표에는 사용자가 Chat 앱과 상호작용하는 일반적인 방법과 인증이 필요한지 또는 지원되는지 여부가 나와 있습니다.

시나리오 인증이 필요하지 않음 사용자 인증 지원 앱 인증 지원
다음 사용자로부터 메시지 수신:
Chat 앱 상호작용 이벤트
Apps Script 콜백
Google Cloud Pub/Sub
메시지에 답장하기
Chat 앱 상호작용 이벤트를 사용하여 동기적으로
Apps Script 콜백 반환 값을 사용하여 동기식으로
새 메시지 보내기
수신 웹훅 사용