Azure Active Directory B2C를 사용하여 FHIR 서비스에 대한 액세스 권한 부여

의료 조직은 Azure Health Data Services의 FHIR® 서비스와 함께 Azure AD B2C(Azure Active Directory B2C)를 사용하여 애플리케이션 및 사용자에게 액세스 권한을 부여할 수 있습니다.

FHIR 서비스에 대한 Azure AD B2C 테넌트 만들기

FHIR 서비스에 대한 Azure AD B2C 테넌트를 만들면 의료 애플리케이션에서 사용자 ID를 관리할 수 있는 보안 인프라가 마련됩니다.

Azure AD B2C 테넌트를 이미 만들었으면 Azure AD B2C를 사용하여 FHIR 서비스 배포로 건너뛸 수 있습니다.

ARM 템플릿을 사용하여 Azure AD B2C 테넌트 배포

PowerShell 또는 Azure CLI를 사용하여 프로그래밍 방식으로 ARM 템플릿을 Azure 구독에 배포합니다. 템플릿의 구문, 속성 및 사용법에 대한 자세한 내용은 Azure Active Directory B2C 인스턴스 배포를 참조하세요.

Azure Cloud Shell에서, PowerShell에서 로컬로 또는 Visual Studio Code에서 코드를 실행하여 Azure AD B2C 테넌트에 FHIR 서비스를 배포합니다.

  1. Connect-AzAccount 명령을 사용하여 Azure에 로그인합니다. 로그인한 후에는 Get-AzContext 명령을 사용하여 사용하려는 구독 및 테넌트를 확인합니다. 필요한 경우 구독 및 테넌트를 변경합니다.

  2. 새 리소스 그룹을 만듭니다. 또는 단계를 건너뛰거나 New-AzResourceGroup으로 시작하는 줄을 주석으로 처리하여 기존 리소스 그룹을 사용합니다.

### variables
$tenantid="your tenant id"
$subscriptionid="your subscription id"
$resourcegroupname="your resource group name"
$b2cName="your b2c tenant name"

### login to azure
Connect-AzAccount -Tenant $tenantid -SubscriptionId $subscriptionid 

### create resource group
New-AzResourceGroup -Name $resourcegroupname -Location $region

### deploy the resource
New-AzResourceGroupDeployment -ResourceGroupName $resourcegroupname -TemplateUri https://raw.githubusercontent.com/Azure-Samples/azure-health-data-and-ai-samples/main/samples/fhir-aad-b2c/b2c-arm-template.json -b2cName $b2cNa

Azure AD B2C 테넌트에 테스트 B2C 사용자 추가

FHIR 서비스의 특정 환자 리소스와 연결하고 인증 흐름이 예상대로 작동하는지 확인하려면 테스트 B2C 사용자가 필요합니다.

  1. Azure Portal에서 B2C 리소스로 이동합니다. B2C 테넌트 열기를 선택합니다.

    B2C 리소스를 보여 주는 스크린샷.

  2. 왼쪽 창에서 사용자를 선택합니다.

    일반 사용자를 보여 주는 스크린샷.

  3. + 새 사용자를 선택합니다.

    새 사용자 추가를 보여 주는 스크린샷.

fhirUser 사용자 지정 사용자 특성은 B2C 사용자를 FHIR 서비스의 사용자 리소스와 연결하는 데 사용됩니다. 이 예에서는 B2C 테넌트에 Test Patient1이라는 사용자를 만들고, 이후 단계에서 FHIR 서비스에서 환자 리소스를 만듭니다. fhirUser 특성 값을 환자 리소스 식별자로 설정하여 Test Patient1 사용자를 환자 리소스에 연결합니다. 사용자 지정 사용자 특성에 대한 자세한 내용은 Azure Active Directory B2C의 사용자 흐름 사용자 지정 특성을 참조하세요.

  1. 왼쪽 창의 Azure AD B2C 페이지에서 사용자 특성을 선택합니다.

  2. + 추가를 선택합니다.

  3. 이름 필드에 fhirUser(대/소문자 구분)를 입력합니다.

  4. 데이터 형식 드롭다운 목록에서 문자열을 선택합니다.

  5. 만들기를 선택합니다.

    B2C 특성을 보여 주는 스크린샷.

새 B2C 사용자 흐름 만들기

사용자 흐름은 사용자가 로그인하려면 따라야 하는 단계의 순서를 정의합니다. 이 예에서는 사용자가 로그인할 때 입력한 액세스 토큰에 fhirUser 클레임이 포함되도록 사용자 흐름을 정의합니다. 자세한 내용은 Azure Active Directory B2C에서 사용자 흐름 및 사용자 지정 정책 만들기를 참조하세요.

  1. 왼쪽 창의 Azure AD B2C 페이지에서 사용자 흐름을 선택합니다.

  2. + 새 사용자 흐름을 선택합니다.

    B2C 사용자 흐름을 보여 주는 스크린샷.

  3. 사용자 흐름에 B2C 테넌트에서 고유한 이름을 지정합니다. (이름이 전역적으로 고유할 필요는 없습니다.) 이 예에서는 사용자 흐름의 이름이 USER_FLOW_1입니다. 이름을 적어 둡니다.

  4. 테스트 사용자가 로그인하여 FHIR 서비스에 대한 액세스 토큰을 얻을 수 있도록, 로컬 계정에 이메일 로그인을 사용하도록 설정합니다.

    B2C 사용자 흐름 구성을 보여 주는 스크린샷.

  5. 사용자 흐름 만들기 페이지에서 5. 애플리케이션 클레임 섹션으로 스크롤한 다음, 자세히 표시...를 선택하여 사용 가능한 모든 클레임 목록을 표시합니다.

  6. fhirUser 클레임을 선택합니다.

  7. 확인을 선택합니다.

  8. 만들기를 선택합니다.

    FHIR 사용자 클레임이 포함된 B2C 사용자 흐름 구성을 보여 주는 스크린샷.

새 B2C 리소스 애플리케이션 만들기

B2C 리소스 애플리케이션은 의료 애플리케이션에서 Azure Active Directory B2C로 보내는 인증 요청을 처리합니다.

  1. 왼쪽 창의 Azure AD B2C 페이지에서 앱 등록을 선택합니다.

  2. + 새 등록을 선택합니다.

    B2C 새 애플리케이션을 보여 주는 스크린샷.

  3. 표시 이름을 입력합니다. 이 예에서는 FHIR 서비스를 사용합니다.

  4. 지원되는 계정 유형 목록에서 모든 ID 공급자 또는 조직 디렉터리의 계정(사용자 흐름으로 사용자 인증용)을 선택합니다.

  5. 리디렉션 URI(권장) 드롭다운 목록에서 퍼블릭 클라이언트/네이티브(모바일 및 데스크톱)를 선택합니다. 값을 Postman 콜백 URI https://oauth.pstmn.io/v1/callback으로 채웁니다. 콜백 URI는 테스트용입니다.

  6. 권한 섹션에서 openid 및 오프라인 액세스 권한에 대한 관리자 동의 부여를 선택합니다.

  7. 등록을 선택합니다. 애플리케이션 등록이 완료될 때까지 기다립니다. 브라우저가 애플리케이션 개요 페이지로 자동으로 이동합니다.

    B2C 애플리케이션 레지스터를 보여 주는 스크린샷.

앱에 대한 API 권한 구성

  1. 왼쪽 창의 앱 등록 페이지에서 매니페스트를 선택합니다.

  2. oauth2Permissions 배열을 찾을 때까지 스크롤합니다. 이 배열을 oauth2Permissions.json 파일에 있는 하나 이상의 값으로 바꿉니다. 전체 배열 또는 개별 권한을 복사합니다.

    목록에 권한을 추가하면 B2C 테넌트의 모든 사용자가 API 권한으로 액세스 토큰을 얻을 수 있습니다. 액세스 수준이 B2C 테넌트 내의 사용자에게 적합하지 않으면 배열에 추가하지 마세요. 권한을 사용자 하위 집합으로 제한하는 방법이 없기 때문입니다.

  3. oauth2Permissions 배열이 채워진 후, 저장을 선택합니다.

    B2C 애플리케이션 매니페스트를 보여 주는 스크린샷.

웹 API를 표시하고 애플리케이션 ID URI 할당

  1. 왼쪽 창의 앱 등록 페이지에서 API 표시를 선택합니다.

  2. 추가를 선택합니다.

  3. 기본적으로 애플리케이션 ID URI 필드는 애플리케이션(클라이언트) ID로 채워집니다. 원한다면 이 값을 변경합니다. 이 예에서 이 값은 fhir입니다.

  4. 저장을 선택합니다.

    B2C 애플리케이션 API를 보여 주는 스크린샷.

  5. 왼쪽 창의 앱 등록 페이지에서 API 권한을 선택합니다.

  6. + 권한 추가를 선택합니다.

    B2C API 권한을 보여 주는 스크린샷.

  7. API 권한 요청 창에서 내 조직에서 사용하는 API를 선택합니다.

  8. 목록에서 리소스 애플리케이션을 선택합니다.

    API가 사용된 B2C API 권한을 보여 주는 스크린샷.

  9. API 권한 요청 창의 환자 섹션에서 권한을 하나 이상 선택합니다. 이 예에서는 patient.all.read 권한을 선택합니다. 이는 범위가 patient.all.read인 액세스 토큰을 요청하는 사용자에게 환자 구획(patient.all.read)의 모든 FHIR 리소스(patient.all.read)에 대한 읽기 권한(patient.all.read)이 있음을 의미합니다. 자세한 내용은 환자 구획을 참조하세요.

  10. 권한 추가를 선택합니다.

    권한이 추가된 B2C API 권한을 보여 주는 스크린샷.

  11. API 권한 페이지의 구성된 권한 섹션에서 관리자 동의 허용을 선택합니다.

    관리자 동의를 위한 B2C API 권한을 보여 주는 스크린샷.

Azure Active Directory B2C를 ID 공급자로 사용하여 FHIR 서비스 배포

Azure Active Directory B2C를 ID 공급자로 사용하여 FHIR 서비스를 배포하면 FHIR 서비스에서 사용자의 Azure AD B2C 자격 증명을 기반으로 사용자를 인증하여 권한 있는 사용자만 중요한 환자 정보에 액세스할 수 있게 만들 수 있습니다.

B2C 기관 및 클라이언트 ID 가져오기

기관클라이언트 ID(또는 애플리케이션 ID) 매개 변수를 사용하여 Azure AD B2C 테넌트를 ID 공급자로 사용하도록 FHIR 서비스를 구성합니다.

  1. B2C 테넌트 이름과 사용자 흐름의 이름을 사용하여 기관 문자열을 만듭니다.

    https://<YOUR_B2C_TENANT_NAME>.b2clogin.com/<YOUR_B2C_TENANT_NAME>.onmicrosoft.com/<YOUR_USER_FLOW_NAME>/v2.0
    
  2. .well-known/openid-configuration 엔드포인트에 요청하여 기관 문자열을 테스트합니다. 문자열을 브라우저에 입력하여 OpenId 구성 JSON 파일로 이동하는지 확인합니다. OpenId 구성 JSON 파일이 로드되지 않으면 B2C 테넌트 이름과 사용자 흐름 이름이 올바른지 확인합니다.

    https://<YOUR_B2C_TENANT_NAME>.b2clogin.com/<YOUR_B2C_TENANT_NAME>.onmicrosoft.com/<YOUR_USER_FLOW_NAME>/v2.0/.well-known/openid-configuration
    
  3. 리소스 애플리케이션 개요 페이지에서 클라이언트 ID를 검색합니다.

    B2C 애플리케이션 개요 페이지를 보여 주는 스크린샷.

ARM 템플릿을 사용하여 FHIR 서비스 배포

ARM 템플릿을 사용하여 FHIR 서비스 배포를 간소화할 수 있습니다. PowerShell 또는 Azure CLI를 사용하여 ARM 템플릿을 Azure 구독에 배포합니다.

Azure Cloud Shell에서, PowerShell에서 로컬로 또는 Visual Studio Code에서 코드를 실행하여 Azure AD B2C 테넌트에 FHIR 서비스를 배포합니다.

  1. Connect-AzAccount 명령을 사용하여 Azure에 로그인합니다. Get-AzContext 명령을 사용하여 사용하려는 구독 및 테넌트를 확인합니다. 필요한 경우 구독 및 테넌트를 변경합니다.

  2. 새 리소스 그룹을 만듭니다. 또는 단계를 건너뛰거나 New-AzResourceGroup으로 시작하는 줄을 주석으로 처리하여 기존 리소스 그룹을 사용합니다.

### variables
$tenantid="your tenant id"
$subscriptionid="your subscription id"
$resourcegroupname="your resource group name"
$region="your desired region"
$workspacename="your workspace name"
$fhirServiceName="your fhir service name"
$smartAuthorityUrl="your authority (from previous step)"
$smartClientId="your client id (from previous step)"

### login to azure
Connect-AzAccount 
#Connect-AzAccount SubscriptionId $subscriptionid
Set-AzContext -Subscription $subscriptionid
Connect-AzAccount -Tenant $tenantid -SubscriptionId $subscriptionid
#Get-AzContext 

### create resource group
New-AzResourceGroup -Name $resourcegroupname -Location $region

### deploy the resource
New-AzResourceGroupDeployment -ResourceGroupName $resourcegroupname -TemplateUri https://raw.githubusercontent.com/Azure-Samples/azure-health-data-and-ai-samples/main/samples/fhir-aad-b2c/fhir-service-arm-template.json -tenantid $tenantid -region $region -workspaceName $workspacename -fhirServiceName $fhirservicename -smartAuthorityUrl $smartAuthorityUrl -smartClientId $smartClientId

Azure AD B2C 사용자가 FHIR 리소스에 액세스할 수 있는지 확인

유효성 검사 프로세스에는 FHIR 서비스에서 환자 리소스를 만들고, 환자 리소스를 Azure AD B2C 사용자에 연결하고, B2C 사용자에 대한 액세스 토큰을 가져오도록 Postman을 구성하는 작업이 포함됩니다. 유효성 검사 프로세스가 완료되면 B2C 테스트 사용자를 사용하여 환자 리소스를 가져올 수 있습니다.

Postman을 실행하여 액세스 토큰 가져오기

로컬로 또는 웹 브라우저에서 Postman 애플리케이션을 실행합니다. FHIR 서비스에 대한 적절한 액세스 권한을 얻는 단계는 Postman을 사용하여 FHIR 서비스에 액세스를 참조하세요.

FHIR 리소스 가져오기 섹션의 단계를 수행하면 요청에서 빈 응답을 반환합니다. FHIR 서비스는 환자 리소스가 없는 새 서비스이기 때문입니다.

FHIR 서비스에서 환자 리소스 만들기

B2C 테넌트의 사용자는 사용자가 FHIR 리소스에 연결(예: 환자 또는 실무자로)될 때까지 리소스를 읽을 수 없습니다. FHIR 서비스가 테넌트로 지정된 Microsoft Entra ID에서 FhirDataWriter 또는 FhirDataContributor 역할이 있는 사용자는 이 단계를 수행해야 합니다.

  1. 이 본문으로 메서드를 PUT으로 변경하고 {{fhirurl}}/Patient/1 요청을 실행하여 특정 식별자를 가진 환자를 만듭니다.
{
    "resourceType": "Patient",
    "id": "1",
    "name": [
        {
            "family": "Patient1",
            "given": [
                "Test"
            ]
        }
    ]
}
  1. 메서드를 다시 GET으로 변경하고 {{fhirurl}}/Patient 요청에서 새로 만들어진 환자를 반환하는지 확인하여 환자가 만들어졌는지 확인합니다.

B2C 테넌트의 테스트 사용자와 FHIR 서비스의 리소스 간에 명시적 링크를 만들어야 합니다. Microsoft Graph에서 확장 특성을 사용하여 링크를 만듭니다. 자세한 내용은 Azure Active Directory B2C에서 사용자 지정 특성 정의를 참조하세요.

  1. B2C 테넌트로 이동합니다. 왼쪽 창에서 앱 등록을 선택합니다.

  2. 모든 애플리케이션을 선택합니다.

  3. b2c-extensions-app 접두사가 있는 애플리케이션을 선택합니다.

    B2C 앱 목록을 보여 주는 스크린샷.

  4. 애플리케이션(클라이언트) ID 값을 기록해 둡니다.

    B2C 확장 앱을 보여 주는 스크린샷.

  5. B2C 테넌트 홈 페이지로 돌아가서, 왼쪽 창에서 사용자를 선택합니다.

    B2C 홈 사용자를 보여 주는 스크린샷.

  6. Test Patient1을 선택합니다.

    B2C 사용자 목록을 보여 주는 스크린샷.

  7. 개체 ID 값을 적어 둡니다.

    B2C 사용자 ID를 보여 주는 스크린샷.

  8. Microsoft Graph Explorer를 엽니다. B2C 테넌트에 대한 전역 관리자 역할에 할당된 사용자로 로그인합니다. (B2C 테넌트에서 새 관리 사용자를 만들어서 테넌트의 사용자를 관리하는 것이 좋습니다.)

    Graph 로그인을 보여 주는 스크린샷.

  9. 사용자의 아바타를 선택한 다음, 권한에 동의를 선택합니다.

    테스트 사용자에 대한 Graph 동의를 보여 주는 스크린샷.

  10. 사용자를 찾을 때까지 스크롤합니다. User.ReadWrite.All에 동의합니다. 이 권한을 사용하면 Test Patient1 사용자를 fhirUser 클레임 값으로 업데이트할 수 있습니다.

    fhirUser 클레임에 대한 Graph 동의를 보여 주는 스크린샷.

  11. 동의 프로세스가 완료되면 사용자를 업데이트합니다. b2c-extensions-app 애플리케이션(클라이언트) ID와 사용자 개체 ID가 필요합니다.

    • 메서드를 PATCH로 변경합니다.

    • URL을 https://graph.microsoft.com/v1.0/users/{USER_OBJECT_ID}로 변경합니다.

    • PATCH 본문을 만듭니다. PATCH 본문은 단일 키-값 쌍이며, 키 형식은 extension_{B2C_EXTENSION_APP_ID_NO_HYPHENS}_fhirUser이고 값은 https://{YOUR_FHIR_SERVICE}.azurehealthcareapis.com/Patient/1" 환자의 정규화된 FHIR 리소스 ID입니다.

    자세한 내용은 Microsoft Graph를 통해 확장 특성 관리를 참조하세요.

  12. 요청의 형식이 지정되면 쿼리 실행을 선택합니다. B2C 테넌트의 사용자가 FHIR 서비스의 환자 리소스에 연결되었음을 확인하는 성공 응답을 기다립니다.

    Graph 패치를 보여 주는 스크린샷.

B2C 사용자에 대한 액세스 토큰을 가져오도록 Postman 구성

인증 흐름을 테스트하기 위한 액세스 토큰을 가져옵니다.

  1. Postman 애플리케이션을 시작한 다음, 빈 컬렉션을 새로 만듭니다. 이 예에서 컬렉션의 이름은 FHIR Patient입니다.

    Postman의 새 컬렉션을 보여 주는 스크린샷.

  2. 컬렉션 개요에서 권한 부여 탭을 선택합니다.

  3. 형식 드롭다운 목록에서 OAuth 2.0을 선택합니다.

    Postman 인증을 보여 주는 스크린샷.

  4. 새 토큰 구성 섹션으로 스크롤하고 다음 값을 입력합니다.

    • 콜백 URL. 이 값은 B2C 리소스 애플리케이션이 만들어질 때 구성됩니다.

      https://oauth.pstmn.io/v1/callback
      
    • 인증 URL. 이 값은 B2C 테넌트의 이름과 사용자 흐름의 이름을 사용하여 만들 수 있습니다.

      https://{YOUR_B2C_TENANT_NAME}.b2clogin.com/{YOUR_B2C_TENANT_NAME}.onmicrosoft.com/{YOUR_USER_FLOW_NAME}/oauth2/v2.0/authorize
      
    • 액세스 토큰 URL 이 값은 B2C 테넌트의 이름과 사용자 흐름의 이름을 사용하여 만들 수 있습니다.

      https://{YOUR_B2C_TENANT_NAME}.b2clogin.com/{YOUR_B2C_TENANT_NAME}.onmicrosoft.com/{YOUR_USER_FLOW_NAME}/oauth2/v2.0/token
      
    • 클라이언트 ID 이 값은 B2C 리소스 애플리케이션의 애플리케이션(클라이언트) ID입니다.

      {YOUR_APPLICATION_ID}
      
    • 범위. 이 값은 API 표시 섹션의 B2C 리소스 애플리케이션에 정의되어 있습니다. 권한이 부여된 범위는 patient.all.read입니다. 범위 요청은 정규화된 URL(예: https://testb2c.onmicrosoft.com/fhir/patient.all.read)이어야 합니다.

  5. B2C 리소스 애플리케이션의 API 표시 섹션에서 정규화된 범위를 복사합니다.

    {YOUR_APPLICATION_ID_URI}/patient.all.read
    

    Postman URL을 보여 주는 스크린샷.

B2C 사용자를 사용하여 환자 리소스 가져오기

Azure AD B2C 사용자가 FHIR 리소스에 액세스할 수 있는지 확인합니다.

  1. Postman의 권한 부여 구성이 B2C 사용자 흐름을 시작하도록 설정된 경우 새 액세스 토큰 가져오기를 선택하여 액세스 토큰을 가져옵니다.

    Postman이 액세스 토큰을 가져오는 것을 보여 주는 스크린샷.

  2. 테스트 환자 자격 증명을 사용하여 로그인합니다.

    Postman이 토큰을 가져오는 것을 보여 주는 스크린샷.

  3. 컬렉션의 모든 요청에 액세스 토큰을 사용하도록 토큰 사용을 선택합니다.

    Postman이 토큰을 사용하는 것을 보여 주는 스크린샷.

  4. FHIR 서비스에서 환자 리소스를 검색하는 새 요청을 만듭니다. 컬렉션 이름 옆에 있는 줄임표 단추(...)를 선택한 다음, 요청 추가를 선택합니다.

    Postman 요청이 추가된 것을 보여 주는 스크린샷.

  5. 메서드를 GET으로 설정하고, 정규화된 FHIR 서비스 URL을 입력한 다음, /Patient 경로를 추가합니다.

  6. 보내기를 선택합니다.

  7. 응답에 환자 리소스가 한 건 포함되어 있는지 확인합니다.

    Postman 요청 응답을 보여 주는 스크린샷.

다음 단계

다중 ID 공급자 구성

ID 공급자 구성 문제 해결

참고 항목

FHIR®은 HL7의 등록 상표이며, HL7의 사용 허가 하에 사용됩니다.