SMART on FHIR
代替医療アプリケーションと再利用可能なテクノロジ (SMART on FHIR) は、アプリケーションがデータ ストアを介して臨床情報にアクセスできる医療基準です。 OAuth2 や OpenID Connect などのオープン標準に基づくセキュリティ層を FHIR@ インターフェイスに追加して、EHR システムとの統合を可能にします。 SMART on FHIR を使用すると、少なくとも 3 つの重要な利点が得られます。
- アプリケーションには、FHIR リポジトリに対する認証/認可を取得するための既知の方法があります。
- SMART on FHIR を使用して FHIR リポジトリにアクセスするユーザーは、リポジトリ内のすべてのデータにアクセスするのではなく、ユーザーに関連付けられているリソースに制限されます。
- ユーザーは、SMART 臨床スコープを使用して、制限されたデータ セットへのアクセスをアプリケーションに許可することができます。
次のチュートリアルでは、FHIR サービスを使用して SMART on FHIR アプリケーションを有効にする手順について説明します。
前提条件
- FHIR サービスのインスタンス
- .NET SDK 6.0
- クロスオリジン リソース共有 (CORS) を有効にする
- Microsoft Entra ID でパブリック クライアント アプリケーションを登録する
- アプリケーションを登録したら、クライアント アプリケーションの
applicationId
を書き留めておきます。
- アプリケーションを登録したら、クライアント アプリケーションの
- リソースを作成し、ロールの割り当てを追加するために、FHIR サービスの Azure サブスクリプションにアクセスできることを確認します。
Azure Health Data Services サンプルを使用した SMART on FHIR (SMART on FHIR (Enhanced))
手順 1: FHIR SMART ユーザー ロールを設定する
「ユーザーの管理: ユーザーにロールを割り当てる」セクションに一覧表示されている手順に従います。 このロールに追加されたユーザーは、要求が SMART on FHIR 実装ガイドに準拠していれば、FHIR サービスにアクセスできます。 このロールのユーザーに付与されるアクセスは、fhirUser コンパートメントに関連付けられているリソースと臨床スコープの制限によって制限されます。
Note
SMART on FHIR 実装ガイドでは、スコープを使って FHIR リソースの種類へのアクセスを定義します。 これらのスコープは、アプリケーションの FHIR リソースに対するアクセスに影響を与えます。 SMART ユーザー ロールを持つユーザーは、FHIR サービスで読み取り API の操作を実行するためのアクセス権を持ちます。 SMART ユーザー ロールでは、FHIR サービスへの書き込みアクセスは許可されません。
手順 2: FHIR サーバーとサンプルの統合
リンクをクリックして、Azure Health Data と AI サンプル オープン ソース ソリューションに移動します。 このドキュメントに記載されているこの手順により、FHIR サーバーと他の Azure サービス (APIM、Azure Functions など) の統合が可能になります。
Note
サンプルはオープンソース コードであり、使用する前に GitHub で情報とライセンス条項を確認する必要があります。 これらは Azure Health Data Service の一部ではなく、Microsoft サポートではサポートされていません。 これらのサンプルは、Microsoft Entra ID を ID プロバイダーのワークフローとして使用して、Azure Health Data Services (AHDS) とその他のオープンソース ツールを併用して、「§170.315(g)(10) 患者および住民サービス基準の標準化された API」への準拠を実証する方法を示すために使用します。
SMART on FHIR プロキシ
クリックして展開します。
Note
これは、前述の AHDS サンプルを使用した SMART on FHIR(Enhanced) のもう 1 つのオプションです。 SMART on FHIR(Enhanced) を採用することをおすすめします。 SMART on FHIR プロキシ オプションは従来のオプションです。 SMART on FHIR(Enhanced) は、SMART on FHIR プロキシよりも追加された機能を提供します。 SMART on FHIR(Enhanced) は、「SMART on FHIR 実装ガイド (v 1.0.0)」と「§170.315(g)(10) 患者および住民サービス基準の標準化 API の要件」を満たしています。
手順 1: クライアント アプリケーションの管理者の同意を設定する
SMART on FHIR を使用するには、まずアプリを認証して承認する必要があります。 SMART on FHIR を初めて使用するときは、アプリが FHIR リソースにアクセスできるように管理者の同意を得る必要もあります。
アプリに所有権ロールがない場合は、アプリの所有者に連絡し、アプリで管理者の同意を付与するように依頼します。
管理者特権がある場合は、次の手順を実行して管理者の同意を自分自身に直接付与します。 (アプリでプロンプトが表示されたら、後で管理者の同意を自分に付与することもできます。)これらの同じ手順を使用して、他のユーザーを所有者として追加して、アプリの登録を表示および編集できます。
自分自身または別のユーザーをアプリの所有者として追加するには:
- Azure portal で、[Microsoft Entra ID] に移動します。
- 左側のメニューで、[アプリの登録] を選択します。
- 作成したアプリの登録を検索し、それを選択します。
- 左側のメニューの [管理] で、[所有者] を選択します。
- [所有者の追加] を選択し、管理者の同意を得たい自分自身またはユーザーを追加します。
- [保存] を選びます。
手順 2: SMART on FHIR プロキシを有効にする
SMART on FHIR では、Audience
の識別子 URI が FHIR サービスの URI と同じである必要があります。 FHIR サービスの標準構成では、Audience
値として https://fhir.azurehealthcareapis.com
が使用されます。 ただし、FHIR サービスの特定の URL (https://MYFHIRAPI.fhir.azurehealthcareapis.com
など) と一致する値を設定することもできます。 これは、SMART on FHIR プロキシを操作する際に必要になります。
FHIR インスタンスの [認証] 設定で SMART on FHIR プロキシを有効にするには、[SMART on FHIR プロキシ] チェック ボックスをオンにします。
SMART on FHIR プロキシは、SMART on FHIR アプリと Microsoft Entra ID の間の仲介役として機能します。 認証応答 (認証コード) は、アプリ自体ではなく、SMART on FHIR プロキシに送信される必要があります。 その後、応答はプロキシによってアプリに転送されます。
この 2 段階の認証コードのリレーのため、Microsoft Entra クライアント アプリケーションの応答 URL (コールバック) を、SMART on FHIR プロキシの応答 URL と SMART on FHIR アプリの応答 URL を組み合わせた URL に設定する必要があります。 結合された応答 URL は、次の形式になります。
https://MYFHIRAPI.azurehealthcareapis.com/AadSmartOnFhirProxy/callback/aHR0cHM6Ly9sb2NhbGhvc3Q6NTAwMS9zYW1wbGVhcHAvaW5kZXguaHRtbA
この応答で、aHR0cHM6Ly9sb2NhbGhvc3Q6NTAwMS9zYW1wbGVhcHAvaW5kZXguaHRtbA
は SMART on FHIR アプリの応答 URL であり、URL セーフな base64 エンコードされたバージョンです。 SMART on FHIR アプリ起動ツールの場合、アプリがローカルで実行されていると、応答 URL は https://localhost:5001/sampleapp/index.html
になります。
次のようなスクリプトを使用すると、結合された応答 URL を生成できます。
$replyUrl = "https://localhost:5001/sampleapp/index.html"
$fhirServerUrl = "https://MYFHIRAPI.fhir.azurewebsites.net"
$bytes = [System.Text.Encoding]::UTF8.GetBytes($ReplyUrl)
$encodedText = [Convert]::ToBase64String($bytes)
$encodedText = $encodedText.TrimEnd('=');
$encodedText = $encodedText.Replace('/','_');
$encodedText = $encodedText.Replace('+','-');
$newReplyUrl = $FhirServerUrl.TrimEnd('/') + "/AadSmartOnFhirProxy/callback/" + $encodedText
Microsoft Entra ID 用に先ほど作成したパブリック クライアント アプリケーションにこの応答 URL を追加します。
手順 3: テスト患者を取得する
FHIR サービスと SMART on FHIR プロキシをテストするには、データベースに少なくとも 1 人の患者が必要です。 API をまだ使用しておらず、データベースにデータがない場合は、「Postman を使用して FHIR サービスにアクセスする」を参照して、患者を読み込んでください。 特定の患者の ID を書き留めておきます。
手順 4: SMART on FHIR アプリ起動ツールをダウンロードする
オープンソースの FHIR Server for Azure リポジトリには、簡単な SMART on FHIR アプリ起動ツールとサンプルの SMART on FHIR アプリが含まれています。 このチュートリアルでは、この SMART on FHIR アプリ起動ツールをローカルで使用して設定をテストします。
次のコマンドを使用して、GitHub リポジトリをクローンし、アプリケーションに移動できます。
git clone https://github.com/Microsoft/fhir-server
cd fhir-server/samples/apps/SmartLauncher
このアプリケーションには、いくつかの構成設定が必要です。それは、appsettings.json
で設定できます。
{
"FhirServerUrl": "https://MYFHIRAPI.fhir.azurehealthcareapis.com",
"ClientId": "APP-ID",
"DefaultSmartAppUrl": "/sampleapp/launch.html"
}
dotnet user-secrets
機能を使用することをお勧めします:
dotnet user-secrets set FhirServerUrl https://MYFHIRAPI.fhir.azurehealthcareapis.com
dotnet user-secrets set ClientId <APP-ID>
次のコマンドを使って、アプリケーションを実行します:
dotnet run
手順 5: SMART on FHIR プロキシをテストする
SMART on FHIR アプリ起動ツールを起動した後、ブラウザーで https://localhost:5001
に移動できます。ここには、次の画面が表示されます:
[患者]、[外来診察]、または [開業医] の情報を入力すると、[起動コンテキスト] が更新されたことがわかります。 FHIR サービスを使用している場合、起動コンテキストは、患者や開業医などの情報を含む JSON ドキュメントにすぎません。 この起動コンテキストは base64 でエンコードされており、launch
クエリ パラメーターとして SMART on FHIR アプリに渡されます。 SMART on FHIR 仕様によれば、この変数は SMART on FHIR アプリに対して非透過的であり、ID プロバイダーに渡されます。
SMART on FHIR プロキシでは、この情報を使用して、トークン応答のフィールドが設定されます。 SMART on FHIR アプリでは、これらのフィールドを使用して、データの要求対象となる患者と画面上でのアプリケーションの表示方法を制御できます。 SMART on FHIR プロキシでは、以下のフィールドがサポートされています。
patient
encounter
practitioner
need_patient_banner
smart_style_url
これらのフィールドは、アプリにガイダンスを提供することを意図しており、セキュリティ情報を伝達するものではありません。 SMART on FHIR アプリケーションでは、これらを無視できます。
SMART on FHIR アプリ起動ツールによって、ページ下部にある [Launch URL]\(起動 URL\) 情報が更新されることに注意してください。 [起動] を選択してサンプル アプリを起動すると、次のように表示されるはずです。
トークン応答を調べて、起動コンテキスト フィールドがどのようにアプリに渡されたかを確認します。
SMART on FHIR プロキシから SMART on FHIR (Enhanced) に移行する
重要
SMART on FHIR プロキシは、2026 年 9 月に廃止されますので、その日までに SMART on FHIR (Enhanced) に移行してください。 2026 年 9 月 以降、SMART on FHIR プロキシに依存しているアプリケーションでは、FHIR サービスにアクセスするときにエラーが報告されます。
SMART on FHIR (Enhanced) は、SMART on FHIR プロキシと比較してより多くの機能を提供します。 SMART on FHIR(Enhanced) は、「SMART on FHIR 実装ガイド (v 1.0.0)」と「§170.315(g)(10) 患者および住民サービス基準の標準化 API の要件」を満たすと見なされます。次の表に、SMART on FHIR プロキシと SMART on FHIR (Enhanced) の違いを示します。
機能 | SMART on FHIR (Enhanced) | SMART on FHIR プロキシ |
---|---|---|
スタンドアロン起動をサポート | はい | いいえ |
EHR 起動をサポート | はい | はい |
スコープの制限をサポート | はい | いいえ |
ファースト パーティの Azure 製品に依存する | はい。Azure API Management (APIM) などの Azure 製品を統合する必要があります | いいえ |
Microsoft サポート | FHIR サービスをサポートしています。オープン ソース サンプルのサポートは、GitHub を介して報告および監視する必要があります | FHIR サービスをサポート |
移行手順
- 手順 1: FHIR SMART ユーザー ロールを設定する。「ユーザーの管理: ロールへのユーザーの割り当て」セクションに一覧表示されている手順に従います。 SMART ユーザー ロールに追加されたユーザーは、要求が SMART on FHIR 実装ガイドに準拠している場合、FHIR サービスにアクセスできます。
- 手順 2: Azure Health Data と AI OSS サンプルの下に SMART on FHIR サンプルをデプロイする
- 手順 3: FHIR サービス URL のエンドポイントを '{{BASEURL_FROM_APIM}}/smart' に更新する。
- 手順 4: FHIR サービスの [認証] ブレードで、SMART on FHIR プロキシ設定をオフにする。
ご質問がある場合は、Microsoft Q&A でコミュニティのエキスパートから回答を得ることができます。 テクニカル サポートの場合は、サポート リクエストを作成することもできます。
次のステップ
SMART on FHIR 機能の有効化について学習したので、検索パラメーター、修飾子、その他の FHIR 検索メソッドを使用して検索する方法の詳細について、検索サンプルのページを参照してください。
Note
FHIR® は HL7 の登録商標であり、HL7 の許可を得て使用しています。