>

인증, 권한 부여 및 액세스 제어 기능을 추가하는 MERN (Mongo, Express, React-redux, Node) 스택 앱을 만들고 있습니다. 인증 서비스를 구현하는 방법을 알고 있지만 권한 부여 및 액세스 제어를 구현하는 방법을 모르겠습니다. 예를 들어 사용자가 로그인하면 대시 보드에서 할 일을 작성, 편집 및 삭제할 수 있으며 아무도이를 보거나 편집 할 수 없습니다. 어떻게 구현할 수 있습니까? 모든 링크, 코드 또는 도움을 주시면 감사하겠습니다. 고마워!

  • 답변 # 1

    대단한 질문입니다. 그리고 대답은 길다 :-) 나는 방금 비슷한 질문에 대답했기 때문에 그것을 읽을 수 있습니다.

    TL;DR

    찾고 싶은 것을 외부/동적 인증 관리라고합니다. 공식 모델을 속성 기반 액세스 제어 (abac/Wikipedia)라고합니다. 그것은 NIST (Natll Institute of Standards&Technology)에 의해 공식화되었습니다.

    자세한 내용

    당신은 진술했습니다 :

    와이즈 비즈

    사용자가 이러한 작업을 수행하고 다른 작업을 수행하지 못하게하는 속성을 사용하여 정책을 작성해야합니다. 요구 사항을 다시 작성하면 다음과 같이됩니다.

    사용자는 자신이 소유 한 대시 보드에서 TODO 항목을 생성, 편집 및 삭제할 수 있습니다.

    아무도 소유하지 않은 대시 보드에서 항목을 볼 수 없습니다.

    요구 사항을 살펴보면 다음을 알 수 있습니다.

    속성 (예 : 역할, 부서 ...)을 가진 주제 (또는 사용자)

    작업 (예 :보기, 수정, 삭제 ...)

    오브젝트 또는 리소스 ( "TODO"항목) 및 해당 컨테이너 (대시 보드).

    이는 속성 측면에서 요구 사항을 다시 작성할 수 있음을 의미합니다. 이것은 다음과 같이된다 :

    When user login then he will be able to create, edit and delete todo on his dashboard and no one will be able to see or edit that.

    그러면 다음을 추가 할 수 있습니다 :

    A user can do action == "view" on object of type == "TODO" if user.username == object.dashboard.owner

    이러한 정책을 작성하는 언어를 ALFA (알파/위키피디아, 인증의 약자)라고하며 OASIS XACML에서 정의한 표준입니다.

    정책을 정의한 후에는 정책을 배포하고 실행하고 시행해야합니다. 여기가 ABAC 아키텍처가 시작된 곳입니다 :

    PAP (정책 관리 지점) : 정책이 작성된 위치

    PDP (Policy Decision Point) : 정책이 실행/실행되는 위치

    PEP (Policy Enforcement Point) : 정책이 시행되는 위치-API 게이트웨이, 인터셉터 일 수 있습니다 ...

    PIP (Policy Information Point) : 추가 메타 데이터 및 속성을 검색 할 수있는 위치

    질문은 다음과 같이된다 : 어디에서 시행하겠습니까? MERN 아키텍처는 어떤 모습입니까? 승인 하시겠습니까 :

    웹 UI에서

    ? (기능 인증)

    API 계층 (트랜잭션 인증)

    데이터 계층 (데이터 중심 인증/필터링)

    예를 들어, MongoDB에서 데이터를 필터링하고 허용 된 결과 만 표시 하시겠습니까? API 레이어에 인증을 적용 하시겠습니까? API 게이트웨이 (예 : Kong)는 인증 플러그인 (예 : Axiomatics-Kong.

    오픈 소스 및 상용 ABAC 구현과 표준 기관도 있습니다 (JSON/REST 요청/응답과 같은 일부 사양의 편집자입니다)

    JSON/REST의 Java 정책 시행 지점-오픈 소스

    AuthZForce-공개 소스 PDP

    Axiiomatics-상용 ABAC 플랫폼

    deny all access if object.dashboard.owner != user.username

  • 이전 linux - 터미널에서 잘 실행되지만 스크립트에서 실행할 때 실패하는 하나의 명령이있는 약간의 코드가 있습니다
  • 다음 javascript - nodemon 패키지가 nodejs에 설치되어 있지 않습니다