paint-brush
오픈 소스 프로젝트에서 액세스 승인을 구현한 방법by@hacker6428749

오픈 소스 프로젝트에서 액세스 승인을 구현한 방법

9m2024/07/25
Read on Terminal Reader

대학생을 위한 노트 공유 플랫폼인 Makaut Buddy는 사용자 업로드를 안전하게 관리하는 데 어려움을 겪었습니다. 이 문서에서는 Permit.io를 사용하여 RBAC(역할 기반 액세스 제어)를 구현하여 문제를 해결하고 권한 있는 사용자만 콘텐츠를 업로드할 수 있도록 하여 플랫폼 보안을 강화하는 방법을 설명합니다.
featured image - 오픈 소스 프로젝트에서 액세스 승인을 구현한 방법
undefined HackerNoon profile picture
0-item
1-item


며칠 전, 우리 대학을 위해 설계된 노트 공유 플랫폼인 Makaut Buddy 라는 오픈 소스 애플리케이션 과 관련된 문제로 동료 몇 명이 저에게 접근했습니다. 이 플랫폼은 학생들이 탑 노트, 과거 시험 문제 및 YouTube 튜토리얼을 효율적으로 공유할 수 있도록 돕는 것을 목표로 합니다. .


리소스 업로드 시스템을 성공적으로 개발했지만 승인된 개인만 콘텐츠를 업로드할 수 있도록 하는 데 어려움을 겪었습니다.


아래 데모에서 볼 수 있듯이 모든 사용자는 가입 후 리소스를 생성할 수 있습니다. 이는 사용자가 업로드하는 내용을 규제할 수 없기 때문에 큰 문제가 되었습니다. 일부 사용자는 유해하거나 충격적인 콘텐츠를 업로드했을 수도 있습니다.

처음에는 관리자 역할을 정의하고 특정 그룹의 개인에게 관리 권한을 부여했습니다. 그러나 역할 수가 늘어나면서 코드가 점점 복잡해지고 관리하기 어려워졌습니다.


Permit과 같은 타사 인증 도구의 도움으로 RBAC(역할 기반 액세스 제어) 모델을 사용하여 인증을 관리하는 효율적인 방법에 대한 인식을 높이기 위해 이 기사를 작성하려는 아이디어가 생겼습니다.


RBAC 구현 외에도 액세스 승인 요청 시스템도 도입했습니다. 이 시스템을 통해 콘텐츠를 업로드하려는 사용자는 먼저 액세스를 요청해야 하며, 그런 다음 관리자가 이를 승인하거나 거부할 수 있습니다. 이렇게 추가된 보안 계층은 Makaut Buddy의 콘텐츠 무결성을 유지하는 데 도움이 됩니다.


이 기사에서는 프로그래밍 언어로 JavaScript를 사용하고 프레임워크로 Next.js를 사용했습니다. 그러나 여기에서 논의된 개념은 언어별로 국한되지 않으며 원하는 프로그래밍 언어로 구현할 수 있습니다.


이 기사가 끝나면 애플리케이션에서 기본 RBAC 모델을 구현하는 방법을 알게 될 것입니다.


그 말을 듣고 뛰어 들어 봅시다!


승인이란 무엇입니까?

아침에 학교로 달려가던 때를 기억하시나요? 신분증을 확인하는 경비원이 인증의 완벽한 예입니다. 그들은 캠퍼스에서 허용되는 학생으로서 귀하의 신원을 확인하고 있습니다. 하지만 이는 단지 첫 번째 단계일 뿐입니다. 신원이 확인된 후에도 아무 교실에나 들어가지는 않을 것입니다. 그렇죠? 승인이 들어오는 곳입니다.


귀하의 수업 일정을 귀하의 승인으로 생각하십시오. 귀하의 역할(해당 수업에 등록한 학생)에 따라 특정 영역(교실)에 대한 액세스 권한을 부여합니다. 학생이라 할지라도(인증된) 교직원 휴게실이나 도서관의 출입 제한 구역에 입장할 수 없습니다.


인증과 권한 부여의 차이점은 "당신은 누구입니까?"라고 묻는 것과 같습니다. vs “당신은 무엇을 할 수 있나요?”

인증을 위해 RBAC 모델이 필요한 이유 🤔?

권한 부여는 개인이 권한이 없는 작업을 수행하는 것을 방지하므로 모든 조직에서 중요합니다. 이는 조직의 안전을 보장하고 손실을 방지하는 데 도움이 됩니다.


위의 문장을 예를 들어 설명해 보겠습니다.

회사에는 경험이 풍부한 선배 엔지니어도 있고, 아직 기초를 익히고 있는 인턴도 있습니다. 수석 엔지니어와 인턴이 동일한 수준의 권한을 갖고 있다면 어떤 재앙이 발생할지 상상할 수 있습니다. 아직 배우고 있는 인턴은 회사가 대가를 치르게 될 실수를 무의식적으로 저지를 수도 있습니다. 이와 같은 상황에서는 권한이 개인에게 할당되지 않고 역할에 할당되기 때문에 역할 기반 액세스 제어 모델이 가장 잘 작동합니다. 예를 들어 수석 엔지니어나 기술 책임자만 리소스를 삭제할 수 있지만 모든 인턴은 리소스를 보고 관리할 수만 있습니다.


다음으로 애플리케이션에서 RBAC를 구현하는 방법을 살펴보겠습니다.

앱에서 RBAC를 구현하는 방법:

1. 역할 및 권한 정의

먼저 역할을 정의하고 각 역할에 권한을 할당해야 합니다.

참고: 역할은 조직 내에서 누군가가 갖는 직위 또는 목적입니다. 해당 역할에 할당된 권한이나 특권을 기반으로 개인을 구별할 수 있도록 역할이 필요합니다.

2. 사용자에게 역할 할당

애플리케이션의 각 사용자에게 역할을 할당하는 방법이 필요합니다. 이는 일반적으로 사용자가 가입한 후에 수행됩니다.

3. 인증 API 생성

사용자가 수행하려는 작업을 수행하고 사용자의 인증을 확인하는 API가 백엔드에 필요합니다. 아래 다이어그램을 보면 더 잘 이해할 수 있습니다.



그러나 우리는 처음부터 전체 모델을 구현하지는 않을 것입니다. 대신, 우리는 허가 설정의 전체 프로세스를 매우 원활하고 효율적으로 만들어 주는 Permit이라는 제3자 허가 도구를 사용하여 귀하가 정말로 중요한 기능을 사용할 수 있도록 할 것입니다.


아래 다이어그램은 Permit을 활용하여 애플리케이션에서 RBAC를 구현하는 방법을 보여줍니다.


RBAC 모델 구현

이 섹션에서는 Permit을 사용하여 RBAC(역할 기반 액세스 제어)를 구현하는 단계를 안내합니다.


1단계: 허가 계정 및 작업 공간 생성

RBAC 모델을 설정하기 위해 Permit을 사용하므로 먼저 Permit 계정과 작업 공간을 만들어야 합니다.


2단계: 리소스 생성

이제 애플리케이션에서 액세스를 제어하려는 엔터티인 리소스를 생성해야 합니다.

예를 들어, 메모 작성 애플리케이션에서 리소스는 Notes이고 작업은 만들기 , 읽기, 업데이트삭제일 수 있습니다.


리소스를 생성하려면:

  1. 정책 섹션으로 이동합니다.
  2. 리소스 탭으로 이동합니다.
  3. 필수 세부 정보를 입력하여 새 리소스를 만듭니다.



위의 예에서 리소스 이름은 Notes이고 사용자가 수행할 수 있는 작업은 만들기, 읽기, 업데이트 및 삭제입니다.

3단계: 역할 정의

리소스를 생성한 후에는 애플리케이션에 존재할 역할을 정의해야 합니다.


이 경우 애플리케이션은 대학의 노트 공유 애플리케이션이므로 역할은 다음과 같습니다.

  • 관리자: 리소스를 생성하고 읽을 수 있습니다.
  • 학생: 자료를 읽을 수 있습니다.




4단계: 역할에 작업 할당

두 역할을 모두 생성했으면 이제 아래와 같이 정책 편집기에서 각 역할이 수행할 수 있는 작업을 할당해야 합니다.


5단계: 백엔드 API 구성

이제 Permit 계정이 구성되었으므로 Permit과 통신하기 위한 백엔드 API 생성을 시작할 수 있습니다. Permit에서 제공하는 Node.js SDK를 사용하겠습니다. 허가 문서에서 선호하는 프로그래밍 언어에 대한 SDK를 찾을 수 있습니다.


사용자 동기화 및 기본 역할 할당

먼저, 애플리케이션에 등록하는 각 사용자가 허가 디렉터리에 동기화되고 기본 역할인 학생이 할당되었는지 확인해야 합니다.


이를 위해서는 아래와 같이 백엔드 API를 생성해야 합니다.

이 API는 다음 두 가지 작업을 수행합니다.

  • 허가 API를 초기화합니다.
  • createUser API를 사용하여 새 사용자를 생성합니다.
  • assignRole API를 사용하여 기본 역할을 할당합니다.



Permit 문서 에서 Permit이 제공하는 모든 API에 대해 자세히 알아볼 수 있습니다.


사용자 역할 가져오기

다음으로, Permit.io 에서 사용자 역할을 가져와 이를 다시 프론트엔드로 보내는 백엔드 API를 생성해야 합니다.

아래 표시된 API는 permit.api.users.get(user_key) 를 사용하여 사용자를 가져옵니다.



이 API는 특별한 역할을 가진 사람들만 볼 수 있도록 프런트 엔드 구성 요소를 조작할 수 있는 사용자 역할을 가져옵니다.


특정 역할을 가진 사용자가 작업을 수행할 수 있는지 확인하려면 allowed.check() 함수를 확인할 수도 있습니다.

이로써 우리는 Permit을 사용하여 RBAC 모델을 성공적으로 구현했습니다. 이제 백엔드 경로를 선택한 프런트엔드 프레임워크 또는 라이브러리와 통합하여 설정을 완료할 수 있습니다.

접근 승인 시스템 구현:

설정을 완료하려면 사용자가 역할 업그레이드를 요청할 수 있는 구성 요소가 필요합니다.

  • 관리자 권한이 없는 일반 사용자는 허가 요소를 볼 수 있고 관리자 권한을 요청할 수 있습니다.



  • 관리자는 다른 사용자로부터 들어오는 역할 업그레이드 요청을 승인하거나 거부할 수 있습니다.


1단계: 허가 요소 생성

Permit 요소는 애플리케이션에서 액세스 공유를 쉽게 만들어주는 사전 구축된 내장형 UI 구성 요소 모음인 "Permit Share-If"의 일부입니다. 완전한 기능의 액세스 제어를 제공하도록 설계되어 사용자에게 권한 관리를 간단하고 안전하게 위임할 수 있습니다.


  • 이를 구현하려면 먼저 허가 요소를 생성해야 합니다.
    • 허가 대시보드의 요소 탭으로 이동합니다.
    • 사용자 관리 섹션에서 요소 생성을 클릭합니다.



  • 그런 다음 아래와 같이 필수 정보로 양식을 작성해야 합니다.
    • 관리자 역할을 워크스페이스 소유자로 만듭니다.
    • 뷰어 섹션에 학생 역할을 할당합니다.
    • 기본 역할을 학생으로 설정합니다.



  • 요소를 저장하고 액세스 요청 아래에 새 요소를 만듭니다.:


  • 그런 다음 액세스 요청 정보를 입력하세요.
    • 액세스 요청 요소를 연결하려면 사용자 관리 요소를 선택하세요.
    • 만들기를 클릭하여 요소를 마무리합니다.



  • 다음으로 사용자 관리 요소를 편집하겠습니다.
    • 사용자 관리 요소로 돌아가서 편집하세요.
    • 사용자 관리에서 승인 구성 요소로 액세스 요청 요소를 선택합니다.



그것이 우리가 요소를 만든 것입니다.

2단계: 사용자 로그인을 위한 백엔드 API 생성

요소를 사용하기 전에 사용자를 허가 요소에 로그인하기 위한 백엔드 API를 생성해야 합니다.

참고: 가능한 한 빨리, 가급적이면 가입 직후에 사용자에 로그인하는 것이 중요합니다.


이제 코드를 살펴보겠습니다.

/api/v1/login_permit/?userkey=user_key 엔드포인트에서 제공되는 API 코드:



3단계: 로그인 구현을 위한 프런트엔드 코드

로그인을 구현하기 위한 프런트엔드 코드는 다음과 같습니다.



이것이 바로 우리가 코드를 설정한 것입니다.

4단계: Iframe을 프런트엔드에 통합

이제 아래와 같이 허가 대시보드로 이동하여 사용자 관리 iframe과 액세스 요청 iframe을 모두 복사하면 됩니다.



이제 코드를 얻었으면 사용자에게 요소를 표시하려는 프런트엔드에 iframe 추가해야 합니다. 다음을 수행해야 합니다.

  • 관리자 역할이 있는 사용자에게 사용자 관리 요소를 표시합니다.
  • 학생 역할이 있는 사용자에게 액세스 요청 요소를 표시합니다.


이를 통해 우리는 사용자가 역할 업그레이드를 요청할 수 있고 관리자는 이러한 요청을 승인하거나 거부할 수 있는 액세스 승인 시스템을 성공적으로 설정했습니다.


메모 공유 애플리케이션의 RBAC 데모

  • 데모: 위젯 업로드에 대한 관리자 액세스

이 데모는 "관리자" 역할을 가진 사용자가 업로드 위젯에 액세스하는 방법을 보여줍니다.



  • 데모: 학생 역할 제한 및 액세스 요청

이 데모는 "학생" 역할을 가진 사용자가 업로드 위젯을 볼 수 없고 "관리자" 역할로의 업그레이드를 요청할 수 있는 방법을 보여줍니다.


  • 데모: 역할 업그레이드 승인

이 데모에서는 권한이 있는 사용자가 역할 업그레이드 요청을 승인하는 방법을 보여줍니다.


  • 데모: 위젯 업로드를 위한 업그레이드된 역할 액세스

이 데모는 사용자가 "학생"에서 "관리자"로 업그레이드된 후 업로드 위젯에 대한 액세스 권한을 얻는 방법을 보여줍니다.

결론

그게 다야!


여기까지 읽어주셔서 감사합니다.


이 튜토리얼에서는 인증을 살펴보고 모든 애플리케이션에서 인증이 매우 중요한 이유를 이해했습니다. 또한 애플리케이션을 보호하고 역할에 따라 사용자 액세스를 제어하기 위해 Permit을 설정 및 구성하는 방법도 살펴보았습니다.


이 기사는 인증 및 RBAC 모델의 빙산의 일각에 불과합니다. 보다 세분화된 권한 부여를 위해 ABAC 및 ReBAC를 살펴볼 수 있습니다.