Azure Active Directory와 Hasura JWT의 통합

Azure Active Directory 통합

맞춤형 제작의 힘은Hasura와 우리의authn/authz 기능이 다양한 공급자와 실현을 지원할 수 있다는 데 있다.그 결과 실현의 유연성은 다양한 채택 모델, 고려된 서비스 등을 가져왔다.
예를 들어, Azure Active Directory를 Hasura와 통합하는 프로세스입니다.특히 JWT 청구 매핑을 구현하는 과정입니다.
간단히 말하면, 일부 인증 공급자는 사용자가 JWT에 사용자 정의 성명을 추가하는 것을 허락하지 않는다.이 경우 서버는 claims_map라는 JWT 구성 옵션을 사용하여 기존 선언에 대한 Hasura 세션 변수의 매핑을 JSONPath 또는 문자 값으로 지정할 수 있습니다.claims_map는 JSON 객체이며 키는 세션입니다.
변수와 값은 JSON 경로(JSON 경로에서 지정한 키가 존재하지 않을 때 기본값 옵션이 있음) 또는 텍스트 값일 수 있습니다.이 기능은 documentation에 더 상세한 설명이 있다.
사용자와 협력하여 실현할 때 우리는 예시 절차를 수집하여 이를 어떻게 실현하는지 보여주었고 간단한 프레젠테이션 플랫폼을 구축했다here
주의:Azure 광고 사용에 대한 주의사항은 본고 말미(비B2C 임차인에 대한) 참조

선결 조건

  • 가입한 Azure 계정

  • Azure functions core tools 설치됨(Azure 기능 확장이 있는 VScode 권장)
  • Heroku 계정
  • 하수라 클라우드 설정

  • Hasura Cloud에 계정을 만들고 새로운 자유층 프로젝트를 생성
  • 프로젝트를 만들면 프로젝트 설정 페이지로 안내합니다.오른쪽 상단의 "시동 대시보드"를 클릭하여 Hasura 네트워크 콘솔
  • 을 엽니다.
  • Hasura 네트워크 컨트롤러에서 입문 메뉴를 볼 수 있습니다.이 메뉴 상단에서 [첫 번째 데이터베이스 연결]을 선택합니다.이 메뉴가 없거나 취소한 경우 페이지 맨 위에 있는 데이터 탭을 클릭할 수도 있습니다.
  • 데이터베이스 연결
  • 클릭
  • 탐색한 페이지에서 옵션 카드를 전환하고 기본'기존 데이터베이스 연결'에서'Heroku 데이터베이스 만들기(무료)'로 전환합니다.그리고 '데이터베이스 만들기' 단추를 누르면 자동으로 취미층 Heroku DB를 만들고 이를 Hasura 클라우드 실례에 연결합니다. (Heroku 계정이 필요합니다.)
  • 새 Hasura 프로젝트에 사용자 테이블을 추가합니다. 필드id, azure_idrole를 포함합니다.

  • 일부 가짜 사용자를 만들고 사용자의 조회가 예상대로 작동하는지 확인하십시오

  • "사용자"권한을 추가하여 비관리자가 조회하는 접근 권한을 세션 변수x-hasura-user-id만 사용자 id와 일치하는 인증된 사용자로 제한합니다

    Azure 함수 설정

  • 새 Azure functions 프로젝트에 대한 디렉토리를 만들고 초기화합니다.이 프레젠테이션에서는 노드 및 JavaScript를 선택했습니다.
  • $ mkdir <functions-directory-name>
    $ cd <functions-directory-name>
    $ func init .
    
    
  • 첫 번째 함수를 만듭니다!마찬가지로, 당신은 몇 가지 질문을 받을 것입니다. 여기에서 우리는 'HTTP 트리거' 를 선택했고, 우리의 함수를 'getHasuraInfo' 라고 명명합니다.로컬에서 작동하는지 확인하면 서버를 멈출 수 있습니다.
  • $ func new
    $ npm install
    $ func start
    
    

  • 지금 우리는 일을 매우 간단하게 할 것이다.사용자 정의 성명을 응답체에 하드코딩하기만 하면 됩니다.잠시 후에 업무 논리를 추가할 것입니다.그것이 여전히 현지에서 일하고 있는지 다시 한 번 검사해라.

  • 배포!(This article는 VScode를 설정하고 VScode Azure 함수 확장을 통해 배치하는 데 도움이 됩니다.)코드를 포함하는 함수 단점 가져오기

    Azure 광고 B2C 구축

  • 애저광고 B2C 세입자 설립according to the docs

  • 관리자에게 (임차인 이름) 라이센스 부여 단계에서 "..."을 클릭하여 라이센스를 부여할 수 있습니다.권한 추가 옆에 있는 단추

  • 응용 프로그램을 설정할 때 웹 리디렉션 URI로 https://jwt.ms를 추가합니다.이것은 Azure JWT를 검사하는 데 유용한 도구입니다.
  • 사용자 지정 청구를 위한 B2C 임차인according to the docs 설정
  • 이 프레젠테이션은 페이스북 소셜 로그인 건너뛰기
  • 이 절차는 사용자 정의 클레임 절차를 설정하는 것일 뿐이다.다음 단계
  • 에 실제 사용자 정의 필드를 추가합니다.

    이 새 스트림을 사용하여 올바른 JWT를 생성할 수 있는지 테스트합니다.

  • 네비게이션 신분 체험 프레임 대시보드
  • 아래로 스크롤하여 사용자 정의 보증서 목록을 보고 B2C 1A 등록 로그인
  • 을 선택합니다.
  • 회답urlhttps://jwt.ms로 선택
  • 빨리 뛰어!새 사용자를 만들고 유효한 JWT를 제공했는지 등록 및 확인

  • 사용자 지정 선언을 포함하도록 Azure AD B2C 설정 수정

  • 설명에 따라 from this tutorial 사용자 정의 클레임
  • 이 있는 사용자 정의 보증서를 수정한다.
  • 본 재구매 협의
  • 의 프레젠테이션 사용자 정의 정책 파일 참조
  • Azure 함수를 일시적으로 사용하는 정적 응답 버전

  • "B2C 1A signup signin"을 사용하여 JWT가 예상(정적, 거짓) 선언에 맞는지 다시 테스트합니다.

  • 실제 비즈니스 논리를 사용하여 필요한 클레임 응답을 제공하기 위해 Azure 기능을 업데이트하고 재배치합니다.getHasuraInfo 를 참조하십시오.js는 이 리콜 프로토콜에서 예시를 제공합니다. 이 예시는Azure ID를 가진 기존 Hasura 사용자를 검사하고, Azure ID를 찾지 못하면 새 사용자를 만들고 최종 성명에서 제공할 역할 + 사용자 ID를 되돌려줍니다.
  • 값 아래의 local.settings.json에서 환경 변수를 로컬로 설정합니다.Azure 포털을 통해 prod에 환경 변수를 추가합니다. 기능 응용 프로그램으로 이동하여 설정(설정)에서 환경 변수를 새 응용 프로그램 설정으로 추가합니다.저금하는 것을 잊지 마라!
  • 이 기능을 재배치
  • 하기 전에 모든 컨텐트가 여전히 로컬에서 작동하는지 다시 확인하여 상태 점검
  • 재사용"B2C_1A_signup_signin"으로 테스트를 진행하여 예상한 성명이 있는 유효한 JWT를 얻었고 사용자가 Hasura
  • 에서 생성되었음을 확인합니다.


    Azure 토큰을 사용하기 위해 Hasura 인스턴스 업데이트

  • 클라우드 애플리케이션에 환경 변수를 추가하는 Cloud dashboard 설정 페이지: HASURA_GRAPHQL_JWT_SECRET
  • 다음 값을 HASURA_GRAPHQL_JWT_SECRET의 값으로 설정하여 JWK URL을 구성하고 "Claims Mapping" 기능(see more here을 사용하여Azure AD의 성명을 Hasura가 JWT 영패에 필요한 값에 비추도록 한다.
  • {
      "jwk_url": "https://<mytenant>.b2clogin.com/<mytenant>.onmicrosoft.com/discovery/v2.0/keys?p=b2c_1a_signup_signin",
      "claims_map": {
        "x-hasura-allowed-roles": ["user", "admin"],
        "x-hasura-default-role": { "path": "$.extension_hasura_role" },
        "x-hasura-user-id": { "path": "$.extension_hasura_id" }
      }
    }
    
    

  • 다시 로그인"B2C_1A_signup_signin"하여 JWT에 사용자 정의 클레임이 포함되어 있는지 확인합니다.복제 토큰

  • Hasura 컨트롤러의graphiql 놀이공원에 있는 권한 수여 헤더를 통해 영패를 사용합니다.사용자를 조회할 수 있는지 확인하고 영패의 사용자 ID와 일치하는 사용자만 되돌려줍니다!

    Azure 광고와 함께 사용(비B2C)


    Azure 광고가 있으면 사용자와 그룹을 설정하는 임대인이 있을 수 있습니다. (임의로 등록하지 않았습니다.)이런 상황에서 가장 의미 있는 것은
  • Azure 광고 임대인
  • 에서 기존 사용자 내보내기
  • Azure AD objectId(idToken 성명: users)를 사용자 id로 사용하여 사용자 데이터를 하수라의 oid표에 대량으로 가져옵니다. 캐릭터는 그룹 id에서 만들 수도 있고 단독으로 만들 수도 있습니다.
  • 다음은 그룹 id를 포함한 JWT 토큰의 예입니다.

    다음은 JWT 기밀의 한 예로 claims_map가 추가되었습니다.
    {
      "jwk_url": "https://login.windows.net/common/discovery/keys",
      "claims_map": {
        "x-hasura-allowed-roles": { "path": "$.groups" },
        "x-hasura-default-role": { "path": "$.groups[0]" },
        "x-hasura-user-id": { "path": "$.oid" }
      }
    }
    
    
    이는 토큰의oid(Azure AD 사용자 id)와 groups를 각각 하수라 사용자 id와 캐릭터로 매핑한다.그룹 (지금은 역할) 에 따라 접근 제어를 할 수 있는 흥미로운 권한 설정을 할 수 있습니다.
    새로운/업데이트된 사용자 정보를 Postgres 데이터베이스에 자동으로 업데이트하는 방법과 역할, 그룹 또는 팀 ID 등 관건적인 Hasura 세션 변수를 구축하는 방법은 당신에게 달려 있습니다!

    좋은 웹페이지 즐겨찾기