Share via


Azure Active Directory B2C を使用して FHIR サービスへのアクセスを許可する

医療機関は、Azure Health Data Services の FHIR® サービスと一緒に Azure Active Directory B2C (Azure AD 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 または Visual Studio Code の PowerShell でローカル側からコードを実行して、FHIR サービスを Azure AD B2C テナントにデプロイします。

  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

テスト B2C ユーザーを Azure AD B2C テナントに追加する

FHIR サービスの特定の患者リソースに関連付け、認証フローが期待どおりに動作することを確認するためのテスト B2C ユーザーが必要です。

  1. Azure portal で B2C リソースに移動します。 [B2C テナントを開く] を選択します。

    B2C リソースを示すスクリーンショット。

  2. 左側のウィンドウで、[ユーザー] を選択します。

    ホーム ユーザーを示すスクリーンショット。

  3. [+ 新しいユーザー] を選択します。

    新しいユーザーの追加を示すスクリーンショット。

fhirUser カスタム ユーザー属性は、B2C ユーザーを FHIR サービスのユーザー リソースにリンクするために使用されます。 この例では、Test Patient1 という名前のユーザーが B2C テナントに作成され、後の手順で 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. [OK] を選択します。

  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 と offline_access アクセス許可に対して管理者の同意を付与します] をオンにします。

  7. [登録] を選択します。 アプリケーションの登録が完了するまで待ちます。 ブラウザーは、アプリケーションの [概要] ページに自動的に移動します。

    B2C アプリケーション レジスタを示すスクリーンショット。

アプリ用に API アクセス許可を構成する

  1. 左側のウィンドウの [アプリの登録] ページで、[マニフェスト] を選択します。

  2. oauth2Permissions 配列が見つかるまでスクロールします。 この配列を、oauth2Permissions.json ファイル内の 1 つ以上の値に置き換えます。 配列全体または個々のアクセス許可をコピーします。

    アクセス許可を一覧に追加すると、B2C テナント内の任意のユーザーが API アクセス許可を持つアクセス トークンを取得できます。 アクセス レベルが B2C テナント内のユーザーに適していない場合は、アクセス許可をユーザーのサブセットに制限する方法がないため、配列に追加しないでください。

  3. oauth2Permissions 配列が設定されたら、[保存] を選択します。

    B2C アプリケーション マニフェストを示すスクリーンショット。

Web 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 アクセス許可の要求] ウィンドウで、少なくとも 1 つのアクセス許可を選択します。 この例では、アクセス許可 patient.all.read が選択されています。つまり、スコープ patient.all.read を持つアクセス トークンを要求するユーザーには、患者のコンパートメント (patient.all.read) 内のすべての FHIR リソース (patient.all.read) に対する読み取り特権 (patient.all.read) があります。詳細については、患者のコンパートメントに関するページを参照してください。

  10. [アクセス許可の追加] を選択します。

    アクセス許可が追加された B2C API のアクセス許可を示すスクリーンショット。

  11. [構成されたアクセス許可] セクションの [API のアクセス許可] ページで、[管理者の同意を与える] を選択します。

    管理者の同意のための B2C API アクセス許可を示すスクリーンショット。

ID プロバイダーとして Azure Active Directory B2C を使用する FHIR サービスをデプロイする

ID プロバイダーとして Azure Active Directory B2C を使用する FHIR サービスをデプロイすると、FHIR サービスでは Azure AD B2C 資格情報に基づいてユーザーを認証でき、許可されているユーザーのみが患者の機密情報にアクセスできるようになります

B2C 機関とクライアント ID を取得する

authorityclient 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 サービスをデプロイする

FHIR サービスのデプロイを簡略化するには、ARM テンプレートを使用します。 PowerShell または Azure CLI を使用して、ARM テンプレートを Azure サブスクリプションにデプロイします。

Azure Cloud Shell または Visual Studio Code の PowerShell でローカル側からコードを実行して、FHIR サービスを Azure AD B2C テナントにデプロイします。

  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 アプリケーションをローカル側または Web ブラウザーで実行します。 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、値は患者の完全修飾 FHIR リソース ID https://{YOUR_FHIR_SERVICE}.azurehealthcareapis.com/Patient/1" です。

    詳細については、「Microsoft Graph を使用して拡張機能属性を管理する」を参照してください。

  12. 要求を書式設定したら、[クエリの実行] を選択します。 B2C テナントのユーザーが FHIR サービスの患者リソースにリンクされていることを確認する成功応答が表示されるまで待ちます。

    Graph パッチを示すスクリーンショット。

B2C ユーザーのアクセス トークンを取得するように Postman を構成する

認証フローをテストするためにアクセス トークンを取得します。

  1. Postman アプリケーションを起動し、新しい [空のコレクション] を作成します。 この例では、コレクションに「FHIR Patient」という名前を付けます。

    Postman の新しいコレクションを示すスクリーンショット。

  2. コレクションの概要で [認可] タブを選択します。

  3. [種類] ドロップダウン リストで [OAuth 2.0] を選びます。

    Postman auth を使用した例を示すスクリーンショット。

  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}
      
    • スコープ: この値は、B2C リソース アプリケーションの [API の公開] セクションで定義されます。 スコープが付与されたアクセス許可は patient.all.read です。 スコープ要求は、完全修飾 URL である必要があります (例: https://testb2c.onmicrosoft.com/fhir/patient.all.read)。

  5. B2C リソース アプリケーションの [API の公開] セクションから完全修飾スコープをコピーします。

    {YOUR_APPLICATION_ID_URI}/patient.all.read
    

    Postman URSL を使用した例を示すスクリーンショット。

B2C ユーザーを使用して患者リソースを取り込む

Azure AD B2C ユーザーが FHIR リソースにアクセスできることを確認します。

  1. B2C ユーザー フローを起動するように Postman の認可構成が設定されている場合、[新しいアクセス トークンの取得] を選択してアクセス トークンを取得します。

    Postman のアクセス トークンの取得を示すスクリーンショット。

  2. テスト患者の資格情報を使用してサインインします。

    Postman がトークンを取得する様子を示すスクリーンショット。

  3. [トークンの使用] を選択して、コレクション内のすべての要求に対してアクセス トークンを使用します。

    Postman がトークンを使用する様子を示すスクリーンショット。Postman の使用トークンを示すスクリーンショット。

  4. FHIR サービスで患者リソースを検索する新しい要求を作成します。 コレクションの名前の横にある省略記号ボタン (...) を選択し、[要求の追加] を選択します。

    Postman 要求の追加を示すスクリーンショット。

  5. メソッドを GET に設定し、完全修飾 FHIR サービス URL を入力して、パス /Patient を追加します。

  6. [送信] を選択します。

  7. 応答に単一の患者リソースが含まれていることを確認します。

    Postman 要求の応答を示すスクリーンショット。

次のステップ

複数の ID プロバイダーを構成する

ID プロバイダーの構成をトラブルシューティングする

Note

FHIR® は HL7 の登録商標であり、HL7 の許可を得て使用しています。