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 서비스를 배포합니다.
Connect-AzAccount
명령을 사용하여 Azure에 로그인합니다. 로그인한 후에는Get-AzContext
명령을 사용하여 사용하려는 구독 및 테넌트를 확인합니다. 필요한 경우 구독 및 테넌트를 변경합니다.“리소스 그룹 만들기” 단계를 건너뛰거나
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 사용자가 필요합니다.
B2C 사용자를 fhirUser
사용자 지정 사용자 특성에 연결
fhirUser
사용자 지정 사용자 특성은 B2C 사용자를 FHIR 서비스의 사용자 리소스와 연결하는 데 사용됩니다. 이 예제에서는 B2C 테넌트에서 이름이 Test Patient1인 사용자를 만듭니다. 이후 단계에서는 환자 리소스가 FHIR 서비스에 만들어집니다. fhirUser
특성 값을 환자 리소스 식별자로 설정하여 Test Patient1 사용자를 환자 리소스에 연결합니다. 사용자 지정 사용자 특성에 대한 자세한 내용은 Azure Active Directory B2C의 사용자 흐름 사용자 지정 특성을 참조하세요.
왼쪽 창의 Azure AD B2C 페이지에서 사용자 특성을 선택합니다.
+ 추가를 선택합니다.
이름 필드에 fhirUser(대/소문자 구분)를 입력합니다.
데이터 형식 드롭다운 목록에서 문자열을 선택합니다.
만들기를 선택합니다.
새 B2C 사용자 흐름 만들기
사용자 흐름은 사용자가 로그인하려면 따라야 하는 단계의 순서를 정의합니다. 이 예제에서는 사용자가 로그인하고 제공된 액세스 토큰에 fhirUser
클레임이 포함되도록 사용자 흐름이 정의됩니다. 자세한 내용은 Azure Active Directory B2C에서 사용자 흐름 및 사용자 지정 정책 만들기를 참조하세요.
왼쪽 창의 Azure AD B2C 페이지에서 사용자 흐름을 선택합니다.
+ 새 사용자 흐름을 선택합니다.
사용자 흐름에 B2C 테넌트에서 고유한 이름을 지정합니다. 이름은 전역적으로 고유할 필요가 없습니다. 이 예에서는 사용자 흐름의 이름이 USER_FLOW_1입니다. 이름을 적어 둡니다.
테스트 사용자가 로그인하여 FHIR 서비스에 대한 액세스 토큰을 얻을 수 있도록, 로컬 계정에 이메일 로그인을 사용하도록 설정합니다.
사용자 흐름 만들기 페이지에서 5. 애플리케이션 클레임 섹션으로 스크롤한 다음, 자세히 표시...를 선택하여 사용 가능한 모든 클레임 목록을 표시합니다.
fhirUser 클레임을 선택합니다.
확인을 선택합니다.
만들기를 선택합니다.
새 B2C 리소스 애플리케이션 만들기
B2C 리소스 애플리케이션은 의료 애플리케이션에서 Azure Active Directory B2C로 보내는 인증 요청을 처리합니다.
왼쪽 창의 Azure AD B2C 페이지에서 앱 등록을 선택합니다.
+ 새 등록을 선택합니다.
표시 이름을 입력합니다. 이 예에서는 FHIR 서비스를 사용합니다.
지원되는 계정 유형 목록에서 모든 ID 공급자 또는 조직 디렉터리의 계정(사용자 흐름으로 사용자 인증용)을 선택합니다.
리디렉션 URI(권장) 드롭다운 목록에서 퍼블릭 클라이언트/네이티브(모바일 및 데스크톱)를 선택합니다. 값을 Postman 콜백 URI https://oauth.pstmn.io/v1/callback으로 채웁니다. 이 콜백 URI는 테스트용입니다.
권한 섹션에서 openid 및 오프라인 액세스 권한에 대한 관리자 동의 부여를 선택합니다.
등록을 선택합니다. 애플리케이션 등록이 완료될 때까지 기다립니다. 브라우저가 애플리케이션 개요 페이지로 자동으로 이동합니다.
앱에 대한 API 권한 구성
왼쪽 창의 앱 등록 페이지에서 매니페스트를 선택합니다.
oauth2Permissions
배열을 찾을 때까지 스크롤합니다. 이 배열을 oauth2Permissions.json 파일에 있는 하나 이상의 값으로 바꿉니다. 전체 배열 또는 개별 권한을 복사합니다.목록에 권한을 추가하면 B2C 테넌트의 모든 사용자가 API 권한으로 액세스 토큰을 얻을 수 있습니다. 액세스 수준이 B2C 테넌트 내의 사용자에게 적합하지 않으면 배열에 추가하지 마세요. 권한을 사용자 하위 집합으로 제한하는 방법이 없기 때문입니다.
oauth2Permissions 배열이 채워진 후, 저장을 선택합니다.
웹 API를 표시하고 애플리케이션 ID URI 할당
왼쪽 창의 앱 등록 페이지에서 API 표시를 선택합니다.
추가를 선택합니다.
기본적으로 애플리케이션 ID URI 필드는 애플리케이션(클라이언트) ID로 채워집니다. 원한다면 이 값을 변경합니다. 이 예에서 이 값은 fhir입니다.
저장을 선택합니다.
왼쪽 창의 앱 등록 페이지에서 API 권한을 선택합니다.
+ 권한 추가를 선택합니다.
API 권한 요청 창에서 내 조직에서 사용하는 API를 선택합니다.
목록에서 리소스 애플리케이션을 선택합니다.
API 권한 요청 창의 환자 섹션에서 권한을 하나 이상 선택합니다. 이 예에서는
patient.all.read
권한을 선택합니다. 이는 범위가patient.all.read
인 액세스 토큰을 요청하는 사용자에게 환자 구획(patient.all.read)의 모든 FHIR 리소스(patient.all.read)에 대한 읽기 권한(patient.all.read)이 있음을 의미합니다. 자세한 내용은 환자 구획을 참조하세요.권한 추가를 선택합니다.
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 서비스를 구성합니다.
B2C 테넌트 이름과 사용자 흐름의 이름을 사용하여 기관 문자열을 만듭니다.
https://<YOUR_B2C_TENANT_NAME>.b2clogin.com/<YOUR_B2C_TENANT_NAME>.onmicrosoft.com/<YOUR_USER_FLOW_NAME>/v2.0
.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
리소스 애플리케이션 개요 페이지에서 클라이언트 ID를 검색합니다.
ARM 템플릿을 사용하여 FHIR 서비스 배포
ARM 템플릿을 사용하여 FHIR 서비스 배포를 간소화할 수 있습니다. PowerShell 또는 Azure CLI를 사용하여 ARM 템플릿을 Azure 구독에 배포합니다.
Azure Cloud Shell에서, PowerShell에서 로컬로 또는 Visual Studio Code에서 코드를 실행하여 Azure AD B2C 테넌트에 FHIR 서비스를 배포합니다.
Connect-AzAccount
명령을 사용하여 Azure에 로그인합니다.Get-AzContext
명령을 사용하여 사용하려는 구독 및 테넌트를 확인합니다. 필요한 경우 구독 및 테넌트를 변경합니다.“리소스 그룹 만들기” 단계를 건너뛰거나
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
역할이 있는 사용자는 이 단계를 수행해야 합니다.
- 이 본문으로 메서드를
PUT
으로 변경하고{{fhirurl}}/Patient/1
요청을 실행하여 특정 식별자를 가진 환자를 만듭니다.
{
"resourceType": "Patient",
"id": "1",
"name": [
{
"family": "Patient1",
"given": [
"Test"
]
}
]
}
- 메서드를 다시
GET
으로 변경하고{{fhirurl}}/Patient
요청에서 새로 만들어진 환자를 반환하는지 확인하여 환자가 만들어졌는지 확인합니다.
환자 리소스를 Azure AD B2C 사용자에 연결
B2C 테넌트의 테스트 사용자와 FHIR 서비스의 리소스 간에 명시적 링크를 만듭니다. Microsoft Graph에서 확장 특성을 사용하여 링크를 만듭니다. 자세한 내용은 Azure Active Directory B2C에서 사용자 지정 특성 정의를 참조하세요.
B2C 테넌트로 이동합니다. 왼쪽 창에서 앱 등록을 선택합니다.
모든 애플리케이션을 선택합니다.
b2c-extensions-app 접두사가 있는 애플리케이션을 선택합니다.
애플리케이션(클라이언트) ID 값을 기록해 둡니다.
B2C 테넌트 홈 페이지로 돌아가서, 왼쪽 창에서 사용자를 선택합니다.
Test Patient1을 선택합니다.
개체 ID 값을 적어 둡니다.
Microsoft Graph Explorer를 엽니다. B2C 테넌트에 대한 전역 관리자 역할에 할당된 사용자로 로그인합니다. (B2C 테넌트에서 새 관리 사용자를 만들어서 테넌트의 사용자를 관리하는 것이 좋습니다.)
사용자의 아바타를 선택한 다음, 권한에 동의를 선택합니다.
사용자를 찾을 때까지 스크롤합니다. User.ReadWrite.All에 동의합니다. 이 권한을 사용하면 Test Patient1 사용자를
fhirUser
클레임 값으로 업데이트할 수 있습니다.동의 프로세스가 완료되면 사용자를 업데이트합니다. 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를 통해 확장 특성 관리를 참조하세요.
요청의 형식이 지정되면 쿼리 실행을 선택합니다. B2C 테넌트의 사용자가 FHIR 서비스의 환자 리소스에 연결되었음을 확인하는 성공 응답을 기다립니다.
B2C 사용자에 대한 액세스 토큰을 가져오도록 Postman 구성
인증 흐름을 테스트하기 위한 액세스 토큰을 가져옵니다.
Postman 애플리케이션을 시작한 다음, 빈 컬렉션을 새로 만듭니다. 이 예에서 컬렉션의 이름은 FHIR Patient입니다.
컬렉션 개요에서 권한 부여 탭을 선택합니다.
형식 드롭다운 목록에서 OAuth 2.0을 선택합니다.
새 토큰 구성 섹션으로 스크롤하고 다음 값을 입력합니다.
콜백 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
)이어야 합니다.
B2C 리소스 애플리케이션의 API 표시 섹션에서 정규화된 범위를 복사합니다.
{YOUR_APPLICATION_ID_URI}/patient.all.read
B2C 사용자를 사용하여 환자 리소스 가져오기
Azure AD B2C 사용자가 FHIR 리소스에 액세스할 수 있는지 확인합니다.
Postman의 권한 부여 구성이 B2C 사용자 흐름을 시작하도록 설정된 경우 새 액세스 토큰 가져오기를 선택하여 액세스 토큰을 가져옵니다.
테스트 환자 자격 증명을 사용하여 로그인합니다.
컬렉션의 모든 요청에 액세스 토큰을 사용하도록 토큰 사용을 선택합니다.
FHIR 서비스에서 환자 리소스를 검색하는 새 요청을 만듭니다. 컬렉션 이름 옆에 있는 줄임표 단추(...)를 선택한 다음, 요청 추가를 선택합니다.
메서드를
GET
으로 설정하고, 정규화된 FHIR 서비스 URL을 입력한 다음,/Patient
경로를 추가합니다.보내기를 선택합니다.
응답에 환자 리소스가 한 건 포함되어 있는지 확인합니다.
다음 단계
참고 항목
FHIR®은 HL7의 등록 상표이며, HL7의 사용 허가 하에 사용됩니다.