방법: 권한 부여 관리

개요

이 가이드에서는 토큰 새로 고침, 해지, 보안 스토리지 모범 사례를 포함하여 Frame.io에서 디바이스 인증 토큰을 관리하는 절차를 설명합니다.

사전 요구 사항

적절한 구성을 위해 C2C 구현: 설정 가이드를 검토해 주시기 바랍니다.

필요한 필수 구성 요소:

  • Frame.io에서 발급한 유효한 client_secret
  • 인증 및 권한 부여 가이드에 자세히 설명된 대로 할당된 client_id
  • 유효한 access_tokenrefresh_token 자격 증명

인증 토큰 이해하기

디바이스 인증에 대한 이전 가이드에서는 사용자 인증을 통해 초기 인증 토큰을 얻는 프로세스를 설명했습니다. 액세스 토큰은 약 8시간 동안 기능을 유지합니다. 디바이스를 자주 재페어링해야 하는 번거로움을 없애기 위해 인증 시 새로 고침 토큰을 함께 발급받을 수 있도록 offline 범위를 구현합니다. 이 새로 고침 토큰을 사용하면 만료 시 새로운 액세스 토큰을 생성할 수 있습니다.

새로 고침 토큰은 14일 동안 유효합니다. 액세스 토큰의 수명을 이처럼 의도적으로 제한하는 것은 손상된 토큰으로 인한 잠재적 취약성을 최소화하여 보안을 강화합니다. 새로 고침 토큰이 만료되기 전에 인증을 갱신하지 않으면 사용자가 다시 인증해야 합니다.

액세스 토큰 갱신 프로세스

액세스 토큰이 만료된 후 API 요청을 보내면 다음과 같은 응답을 받게 됩니다.

1{
2 "code": 401,
3 "errors": [
4 {
5 "code": 401,
6 "detail": "You are not allowed to access that resource",
7 "status": 401,
8 "title": "Not Authorized"
9 }
10 ],
11 "message": "Not Authorized"
12}

다음 명령을 실행하여 새 토큰을 얻으세요.

$curl -X POST https://api.frame.io/v2/auth/token \
> --header 'x-client-version: 2.0.0' \
> --form 'client_id=[client_id]' \
> --form 'client_secret=[client_secret]' \
> --form 'grant_type=refresh_token' \
> --form 'refresh_token=[refresh_token]' \
> | python -m json.tool
API 엔드포인트 사양

/v2/auth/token에 대한 자세한 문서는 여기에서 확인할 수 있습니다.

이 구현은 보안을 강화하기 위해 여러 가지 인증 요소를 요구합니다. 승인되지 않은 당사자가 귀하의 통합을 성공적으로 도용하려면 refresh_tokenclient_secret을 모두 확보해야 합니다.

갱신에 성공하면 다음과 같은 응답이 생성됩니다.

1{
2 "access_token": "[access_token]",
3 "expires_in": 28800,
4 "refresh_token": "[refresh_token]",
5 "token_type": "bearer"
6}

토큰을 성공적으로 새로 고치면 이전 자격 증명은 무효화됩니다. 새로운 인증 토큰을 안전하게 보관해야 합니다.

만료된 새로 고침 토큰을 다시 사용하려고 시도하면 다음과 같은 결과가 발생합니다.

1{
2 "error": "invalid_request"
3}

이는 해당 토큰이 이전에 처리되었으며 더 이상 유효하지 않음을 나타냅니다.

새로 고침 중 401 오류 발생 시

토큰을 새로 고치는 동안 401 Not Authorized 응답을 받았다는 것은 자격 증명이 무효화되었음을 의미하며, 따라서 새로운 인증 프로세스가 필요합니다.

실패한 새로 고침 응답 처리하기

refresh_token 값은 일회성이므로, 네트워크 중단, 시스템 종료 등의 이유로 새로 고침 응답을 캡처하지 못하면 전체 인증/권한 부여 절차를 다시 시작해야 합니다.

이러한 보안 프로토콜은 불편할 수 있지만 시스템 무결성을 유지하는 데 필수적입니다.

토큰 해지 프로세스

프로젝트 완료, 애플리케이션 재설정 등의 상황에서는 Frame.io 액세스를 종료해야 할 수 있습니다. 현재 인증을 중단할 때는 적절한 해지 절차를 구현하세요.

다음 명령을 실행하여 인증을 해지하세요.

재인증하기

해지 후에는 인증 및 권한 부여 가이드에 설명된 대로 인증, 권한 부여 프로세스를 다시 시작해야 합니다.

$curl -X POST https://api.frame.io/v2/auth/revoke \
> --include \
> --header 'x-client-version: 2.0.0' \
> --form 'client_id=[client_id]' \
> --form 'client_secret=[client_secret]' \
> --form 'token=[refresh_token]'
API 엔드포인트 사양

/v2/auth/revoke에 대한 전체 문서는 여기에서 확인할 수 있습니다.

시스템은 페이로드 없이 헤더만 반환합니다. 성공은 200 상태 코드로 표시됩니다.

HTTP/2 200
...

해지 후, access_token 인증이 필요한 Frame.io 작업은 Not Authorized를 반환합니다. 액세스 권한을 복원하려면 디바이스를 프로젝트에 다시 페어링해야 합니다.

토큰 스토리지 구현

시스템을 다시 시작하더라도 영구적인 인증을 유지하려면 안전한 토큰 스토리지가 필요합니다. 다음 필수 지침을 준수하세요.

사용자 액세스 제어 구현: 토큰의 가시성과 액세스를 애플리케이션 프로세스로만 엄격하게 제한하세요. 스토리지 암호화 활성화:client_secret 및 인증 자격 증명을 포함하여 저장된 토큰에 대해 암호화를 구현하세요. 인증 키를 절대로 일반 텍스트 형식으로 보관해서는 안 됩니다. 자격 증명 분리 유지: 저희의 데모 Python 애플리케이션은 스토리지를 하나로 통합하지만, 프로덕션 환경에서는 인증 토큰과 client_secret을 분리해야 합니다. 다음 요소를 고려하세요.

  • client_secretclient_id는 영구적인 디바이스 자격 증명을 나타내며, 이를 분실하면 디바이스에 영구적인 장애가 발생합니다.
  • 인증 토큰은 디바이스가 작동하는 동안 정기적으로 업데이트됩니다.
  • 스토리지를 분리해 두면 토큰 스토리지가 손상되더라도 인증을 완전히 재설정할 필요 없이 디바이스만 다시 페어링하면 됩니다.

SQLite가 최적의 토큰 스토리지 기능을 제공하지만, 최소한 인증 데이터, 핵심 자격 증명을 위한 별도의 스토리지를 구현해야 합니다.

다음 단계

순조로운 진행을 환영하며, 이제 연결 상태 및 하트비트 가이드로 넘어가시기 바랍니다. 질문이나 우려 사항이 있다면 저희 팀에 문의해 주세요.