권한

개요

Workplace 시스템 관리자는 앱을 만들고 해당 앱에 특정한 권한을 부여하는 방법으로 각 통합에 제공되는 기능을 제어할 수 있습니다. 각 앱은 지원하는 서비스를 반영하여 이름을 지정할 수 있습니다. 앱에는 고유한 액세스 토큰과 권한이 제공되며, 이는 해당 앱에서 읽거나 쓰기가 가능한 정보를 제어하는 데 사용합니다.

이 가이드에서는 앱과 권한 모델을 자세히 설명합니다.

권한은 맞춤 통합 앱을 수정하는 시점을 제어합니다.

사용 가능한 권한

각 Workplace 앱은 고유한 권한 세트를 부여받아 그래프 API계정 관리 API에서 제공되는 기능 수준을 제어할 수 있습니다.

앱을 만들고 권한을 부여하면 해당 권한이 커뮤니티 내의 모든 계정에 적용됩니다. 계정 소유자가 앱에 추가적인 권한을 부여하지 않더라도 기능을 활용할 수 있습니다. 이는 각 사용자가 로그인 시 앱에 개별적으로 권한을 부여하는 Facebook의 권한 모델과는 다릅니다.

통합에서 사용할 수 있는 앱 권한의 전체 리스트와 사용 방법에 대한 간략한 설명이 아래에 나와 있습니다.

권한설명

그룹 콘텐츠 읽기

선택된 그룹에서 게시물과 댓글을 읽습니다.

read_group

선택된 그룹에서 모든 콘텐츠를 가져오는 통합을 빌드할 때 이 권한을 사용합니다.

통합이 그룹에서 봇 역할을 하는 경우, 언급 봇 권한을 대신 사용하세요.

그룹 콘텐츠 관리

선택된 그룹에서 게시물과 댓글을 관리합니다.

write_group

콘텐츠(예: 내부 서비스의 주간 보고서, 서비스 상태 알림 봇)를 그룹에 게시하는 통합을 빌드할 때 이 권한을 사용합니다.

사용자 타임라인 읽기

그룹 멤버가 타임라인에 게시한 게시물을 확인합니다.

read_user_feed

다음과 같은 통합을 빌드할 때 이 권한을 사용합니다.

  • 그룹 멤버 타임라인에서 모든 콘텐츠를 가져오는 경우
  • 사용자 프로필에서 상태 필드의 변경 사항을 구독하는 경우

사용자 타임라인 관리

그룹 멤버의 타임라인에 게시물과 댓글을 남깁니다.

write_user_feed

통합이 그룹 멤버의 타임라인에 게시물을 생성하거나 수정하도록 지원할 때 이 권한을 사용합니다.

언급 봇

게시물에 언급되는 경우, 게시물을 보고 댓글에 답글을 남깁니다.

bot_mention

Workplace 그룹에서 봇을 빌드할 때 이 권한을 사용합니다.

그룹 관리

선택된 그룹과 해당 그룹의 멤버를 만들거나 수정, 삭제합니다.

manage_group

그룹을 자동으로 생성하고 조직도 구조나 프로젝트 그룹을 기반으로 그룹 멤버를 채우는 통합을 빌드할 때 이 권한을 사용합니다.

이 권한과의 통합이 특정 그룹으로 범위가 지정되는 경우 새로운 그룹을 만들 수 없습니다.

계정 관리

계정 관리 API를 사용하여 계정을 프로비저닝하거나 업데이트, 비활성화합니다.

manage_accounts

계정 프로비저닝 서비스와의 통합(예: ID 공급자, Active Directory 동기화 도구, 맞춤 계정 관리 API 클라이언트)에 이 권한을 사용합니다.

이 권한을 활성화하면 '이 통합을 사용하여 사용자가 추가되는 즉시 Workplace에 자동 초대하기' 권한을 활성화하는 옵션이 제공됩니다.

배지 관리

Workplace 커뮤니티의 사용자에게 배지를 부여합니다.

manage_badges

통합에서 다음의 기능을 지원할 때 이 권한을 사용합니다.

  • 배지를 멤버에게 부여
  • 멤버에게 부여된 배지 리스트 가져오기
  • 사용 가능한 배지 리스트 가져오기

사용자 이메일 읽기

그룹 멤버의 이메일 주소 확인

read_user_email

이 권한을 사용하면 Workplace 사용자 계정과 연결된 이메일 계정을 가져올 수 있습니다.

업무용 프로필 읽기

사용자의 디렉터리 정보에 대한 읽기 전용 액세스 권한을 부여합니다.

read_user_work_profile

앱에서 사용자의 부서, 사업부, 조직, primary_address, primary_phone, 직책, 성별을 가져올 수 있습니다.

조직도 읽기

사용자의 관리자와 부하 직원에 대한 읽기 전용 액세스 권한을 부여합니다.

read_user_org_chart

앱에서 사용자의 관리자 및 부하 직원을 가져올 수 있습니다.

멤버에게 메시지 보내기

커뮤니티의 멤버와 채팅 메시지를 주고받습니다.

message

업무용 채팅에서 봇을 빌드할 때 이 권한을 사용합니다.

모든 메시지 읽기

커뮤니티의 멤버에게서 수신한 채팅 메시지를 읽습니다.

read_all_messages

Workplace 채팅 사용량을 모니터링할 규정 준수 통합을 지원할 때 이 권한을 사용합니다.

채팅 메시지 삭제

delete_messages

앱에서 사용자와의 대화에서 채팅 메시지를 삭제하도록 지원할 때 이 권한을 사용합니다(예: 잔류 정책 구현).

보안 로그 읽기

로그인 시도, 비밀번호 재설정 요청을 포함한 보안 이벤트의 상세 정보에 액세스합니다.

receive_security_logs

Workplace 채팅 사용량을 모니터링할 규정 준수 통합을 지원할 때 이 권한을 사용합니다.

로그아웃

모든 활성 세션에서 멤버를 로그아웃합니다.

logout

사용자를 Workplace에서 로그아웃할 때 이 권한을 사용합니다.

링크 미리 보기 만들기

Workplace에서 공유되는 링크의 고급 미리 보기를 만듭니다.

link_unfurling

이 권한이 있는 앱은 Workplace에 공유되는 링크의 인증된 미리 보기를 만들 수 있습니다.

업무용 프로필 관리

Workplace에서 업무용 프로필을 읽고 업데이트합니다.

manage_profiles

이 권한이 있는 앱은 read_user_work_profile 및 read_user_org_chart의 읽기 권한을 결합합니다. 또한 계정 정보(예: 이름, 부서, 사업부, 직책, 조직, 전화번호)를 업데이트할 수도 있습니다.

사용자 계정 프로비저닝

Workplace에서 계정을 프로비저닝합니다.

provision_accounts

이 권한이 있는 앱은 (클레임되지 않은) Workplace 계정을 프로비저닝, 비활성화, 삭제할 수 있습니다. 또한 활성, 이메일, 이름, hire_date, 초대된 멤버의 필드를 업데이트할 수도 있습니다.

그룹 멤버 현황 읽기

그룹 멤버 리스트와 사용자가 멤버로 있는 그룹의 리스트를 표시합니다.

list_group_members

이 권한이 있는 앱은 특정 그룹의 멤버 리스트를 쿼리할 수 있습니다. 또한 사용자가 멤버로 있는 그룹의 리스트를 표시할 수도 있습니다.

지식 라이브러리 콘텐츠 관리

지식 라이브러리에서 회사 정보를 만들고 수정 및 삭제합니다.

manage_knowledge_library

이 권한이 있는 앱은 지식 라이브러리 내에서 콘텐츠를 만들고 수정할 수 있습니다. 통합에서 다음의 기능을 지원할 때 이 권한을 사용합니다.

  • 카테고리 만들기/업데이트/삭제
  • 카테고리 내에서 하위 카테고리 만들기
  • 카테고리에 사진/동영상/파일 업데이트
  • 빠른 링크 만들기/업데이트/삭제

지식 라이브러리 콘텐츠 읽기

지식 라이브러리에서 중요한 회사 정보를 읽습니다.

read_knowledge_library

이 권한이 있는 앱은 지식 라이브러리의 콘텐츠에 액세스할 수 있습니다. 통합에서 다음의 기능을 지원할 때 이 권한을 사용합니다.

  • 카테고리 리스트 가져오기
  • 특정 카테고리의 콘텐츠 가져오기
  • 빠른 링크 리스트 가져오기

직원 데이터 내보내기

현재 직원 및 활동 데이터의 리스트를 CSV 형식으로 내보냅니다.

export_employee_data

이 권한이 있는 앱은 모든 Workplace 사용자의 리스트가 나와 있는 CSV 파일을 생성하는 데이터 내보내기 작업을 예약할 수 있습니다. 이 CSV에는 사용자에 대한 데이터 외에 최근 Workplace 기능 사용 정보도 포함됩니다.

그룹 채팅 봇

그룹 채팅에서 소통하도록 봇을 지원합니다.

bot_group_chat

이 권한이 있는 앱은 그룹 채팅에서 봇이 멤버와 소통하도록 지원합니다. 복수의 인원이 참가하는 그룹 채팅을 생성하거나 관리하도록 통합을 지원할 때 이 권한을 사용합니다.

이 권한은 message 권한에 종속됩니다.

설문조사 관리

설문조사 구성을 만들고, 업데이트하고, 삭제하고, 읽습니다.

manage_surveys

이 권한이 있는 앱은 설문조사 구성을 만들고, 업데이트하고, 삭제하고, 읽을 수 있습니다.

설문조사 읽기

설문조사 구성을 읽고 설문조사와 관련된 Webhooks 업데이트를 받습니다.

read_surveys

이 권한이 있는 앱은 설문조사 구성을 읽고 설문조사와 관련된 Webhooks 업데이트를 받을 수 있습니다.

설문조사 읽기

설문조사 구성을 읽고 설문조사와 관련된 Webhooks 업데이트를 받습니다.

read_surveys

이 권한이 있는 앱은 설문조사 구성을 읽고 설문조사와 관련된 Webhooks 업데이트를 받을 수 있습니다.

사람 세트 읽기

사람 세트를 읽습니다.

read_people_sets

이 권한이 있는 앱은 다이내믹 사람 세트 구성을 보고 사람 세트와 관련된 업데이트를 구독할 수 있습니다.

사람 세트 관리

사람 세트를 관리합니다.

manage_people_sets

이 권한이 있는 앱은 Workplace 커뮤니티에서 사람 세트를 만들고, 업데이트하고, 삭제할 수 있습니다.

중요 게시물 읽기

중요 게시물을 읽습니다.

read_important_posts

통합에서 현재 활성화되어 있거나 만료된 중요 게시물 프로모션에 대한 정보를 읽을 수 있습니다.

중요 게시물 관리

중요 게시물을 관리합니다.

manage_important_posts

통합에서 그룹 게시물을 중요 게시물로 표시하여 피드 상단에 표시하고,중요 게시물 프로모션을 일찍 중단할 수 있습니다.

프로필 정보 삭제

비활성화된 사용자의 개인 정보를 삭제합니다.

remove_profile_information

통합에서 Workplace의 비활성화된 사용자로부터 프로필 필드(예: 이름, 프로필 이미지)를 삭제할 수 있습니다.

그룹 수준 권한

일부 권한의 경우, 통합이 특정 그룹에서만 활성화되도록 제한할 수 있습니다. 이 권한을 사용하면 통합이 노출하고자 하는 콘텐츠에만 액세스하도록 범위가 설정됩니다.

예를 들어 알림 게시 통합이 팀의 자체 그룹에만 게시하도록 허용하거나 직원 앱 통합이 특정한 공개 그룹에 있는 콘텐츠만 읽도록 허용할 수 있습니다.

맞춤 통합에 그룹 수준 권한을 지정하려면 통합 수정 대화 상자의 그룹 액세스 패널을 사용하세요.

이 통합에 그룹 수준 권한을 활성화합니다.

그룹 수준 권한은 다음의 권한에 적용됩니다.

  • 그룹 콘텐츠 읽기 - 선택된 그룹에서 게시물, 댓글, 멤버 프로필을 읽습니다.
  • 그룹 콘텐츠 관리 - 선택된 그룹에서 게시물과 댓글을 관리합니다.
  • 그룹 관리 - 선택된 그룹 및 해당 그룹의 멤버를 수정하거나 삭제합니다.

그룹 수준 권한을 모든 그룹에 적용하거나, 시스템 관리자가 선택한 특정 그룹에 적용하거나, 그룹 관리자가 자신의 그룹에 대해 활성화하도록 통합을 구성할 수 있습니다.

관리자 설치 플로

그룹 관리자가 자신의 그룹에 대해 활성화하는 옵션이 활성화된 경우, 그룹 관리자는 그룹 관리 화면 아래에서 새로운 통합 탭을 확인하고 자신의 그룹에 대해 해당 통합을 활성화할 수 있습니다.

그룹 관리자가 활성화할 수 있는 예시 앱은 다음과 같습니다.

앱 토큰 및 사용

Workplace를 위한 새 앱을 만들면 그래프 API, 계정 관리 API 또는 Webhooks에 사용할 수 있는 액세스 토큰이 생성됩니다.

이 액세스 토큰은 한 번만 표시되므로 나중에 코드에서 사용할 수 있도록 토큰을 안전하게 보관하는 것이 중요합니다.

맞춤 통합 앱의 토큰 재설정 플로

Workplace 앱 토큰은 만료 기간이 없고 수동으로 재설정하지 않는 한 갱신할 필요가 없습니다. 특정 앱에서 사용할 수 있는 권한을 수정하는 경우 기존 토큰은 여전히 작동하며 새로운 토큰을 생성할 필요가 없습니다.

토큰을 무효화해야 할 경우가 있다면 앱 수정 대화 상자의 액세스 토큰 재설정 버튼을 사용하여 토큰을 재설정할 수 있습니다. 새로운 토큰이 생성된 후 표시되고, 기존 토큰은 즉시 무효화됩니다.

토큰 보안

액세스 토큰은 강력합니다. 이 토큰은 Workplace에서 회사 데이터에 대한 액세스 권한을 부여합니다. 앱을 만들 때 통합 기능을 완료하는 데 필요한 최소한의 권한을 고려하고 불필요한 권한은 부여하지 마세요.

토큰을 저장하거나 코드 저장소에 추가할 때는 잘못된 사람에게 공유되지 않도록 매우 주의를 기울여야 합니다.

프로덕션 액세스 토큰은 절대로 공개 코드 저장소에 커밋하지 마세요.

API 자격 증명은 자체 서버 환경에만 저장하고 사용해야 하며 이러한 값을 절대 다른 곳(예: 모바일 앱, 웹 브라우저 클라이언트)에 복사하거나 전송해서는 안 됩니다.

통합에 추가적인 보안 계층을 더하려면 IP 화이트리스트를 추가해야 합니다. 이 리스트는 화이트리스트로 등록된 IP 주소의 서버에서만 토큰을 사용하도록 제한합니다.

IP 화이트리스트를 추가하여 특정 서버에서만 토큰을 사용하도록 제한하고 앱 시크릿 코드 증명 요청

사용하지 않는 권한 자동 삭제

맞춤 통합이 특정 권한을 사용한 호출을 30일 동안 보내지 않을 경우 해당 권한이 삭제됩니다. 맞춤 통합에서 이런 삭제가 한 번 발생할 경우 이 삭제 프로세스를 중단하기 위한 옵션이 제공됩니다.

유효한 Webhooks 구독이 설정된 경우 이를 통해 전송된 Webhooks는 관련 권한을 사용한 것으로 간주됩니다.

권한 자동 삭제 제어

앱 시크릿 코드 증명

Workplace의 액세스 토큰은 만료되지 않습니다. 추가적인 보안 계층을 더하기 위해 맞춤 통합에서 앱 시크릿 코드 증명을 요구할 수 있습니다. '앱 시크릿 코드 증명 요구' 옵션을 활성화하면 API 호출이 서버측 코드에서만 전송되고, API 호출을 보낼 때 액세스 토큰과 만료되는 앱 시크릿 코드 증명이 함께 필요합니다.

만료되는 앱 시크릿 코드 증명을 생성하려면 파이프 기호 |로 구분해서 토큰과 UNIX 타임스탬프를 연결한 다음, 연결된 문자열의 SHA-256 해시를 앱 시크릿 코드를 키로 사용하여 생성해야 합니다. PHP의 예는 다음과 같습니다.

$appsecret_proof = hash_hmac('sha256', $access_token.'|'.time(), $app_secret); 

일부 운영 체제와 프로그래밍 언어는 부동 소수점 타임스탬프를 반환합니다. 앱 시크릿 코드 증명을 계산하기 전에 정수 값으로 변환하세요. 일부 프로그래밍 언어는 해시를 다이제스트 개체로 생성합니다. 해시를 16진수 개체로 표시하세요.

앱 시크릿 코드 증명과 함께 API 호출을 보내려면 appsecret_proof 매개변수를 통해 생성된 해시, 앱 시크릿 코드를 해시할 때 사용한 타임스탬프로 설정된 appsecret_time, 액세스 토큰을 함께 전달합니다.

GET https://graph.facebook.com/v2.9/community/groups?
&access_token={access-token}
&appsecret_proof={appsecret_proof}
&appsecret_time={appsecret_time}

타임스탬프가 표시된 앱 시크릿 코드 증명은 5분이 지나면 만료로 간주되므로 각 그래프 API 호출을 보낼 때 새로운 증명을 인라인으로 생성하는 것이 좋습니다.

Postman으로 API 기능 탐색

Postman은 웹 API를 사용할 때 널리 사용하는 도구입니다. Postman으로 Workplace API를 탐색하는 것이 편리하다고 생각할 수 있으나 $appsecret_proof 매개변수는 복잡성을 유발합니다. 이 값은 계산되어야 하고 5분이 지나서 만료되기 때문에 Postman에서 요청 시점에 값을 생성할 수 있다면 문제가 간단해집니다. 사실 이는 Postman에서 Prerequests Scripts & Params 기능을 사용하여 가능합니다. 이 스크립트를 시작점으로 다음의 작업을 진행할 수 있습니다.

// Add to Postman's Pre-request Script Tab
var access_token = "replace-me";
var app_secret = "replace-me";
var time = (new Date().getTime()/1000|0);
postman.setEnvironmentVariable("access_token", access_token)
postman.setEnvironmentVariable("appsecret_time", time);
postman.setEnvironmentVariable("appsecret_proof", CryptoJS.HmacSHA256(access_token + '|' + time, app_secret));
1) (기본값이 아닌) 활성 환경을 만든 후, 2) 요청 전 스크립트에서 계산한 세 개의 매개변수를 추가합니다.