記事
· 2024年8月6日 7m read

Auth0 と InterSystems IRIS FHIR サーバーを使った SMART On FHIR アプリケーションの開発 - 構成編

前回の記事でSMART On FHIRプロジェクトのアーキテクチャを紹介したので、いよいよ本題に入り、必要となる全ての要素の設定を始めましょう。

まずはAuth0から始めます。

Auth0の設定

登録が完了したら、左側のメニューから最初のアプリケーションを作成します

Application menu

この例では、Angular 16で開発されたアプリケーションなので、Single Page Web Applicationタイプとなります。このオプションを選択し、Createをクリックします。

Single Page Web Application

次の画面では以下のフィールドを定義する必要があります。

注意: URLはすべてHTTPSでなければなりません。これはOAuth2接続要件の1つです。

これはOAuth2接続の要件の1つです。これでAuth0が認証と認可プロセスの後にユーザーをリダイレクトするために必要なURLを設定しました。このURLにはポートが定義されていませんが、これはNGINXを通してAngularプロジェクトをDockerにデプロイする際に、デフォルトのHTTPSポート443からアクセスするように指定したためです。好きな名前を付けてください。

Application configuration

この後のAngularプロジェクトの設定について、DomainClient IDの両方にある値を書き出します。

アプリケーションの設定が完了したら、次はAngularアプリケーションからのリクエストを受け取るAPIを定義します。

このオプションを選択すると、必要なデータを入力する画面が表示されます。

API configuration

後でAngularアプリケーションが適切に接続するための "環境 "として使用するAPIの識別子を定義する必要があります。見ての通り、URLを入力することが推奨されていますが、このURLは識別子として使用されるだけなので、実際に機能する必要はありません。この場合、以下のように定義できます。

https://localhost/smart/fhir/r5

最後に、署名アルゴリズムをRS256に設定し、接続ユーザーのFHIRのスコープを定義するPermissionsタブに進みます

API permission

FHIRコンテキストのトピックをより深く知りたい場合は、[ここ](http://hl7.org/fhir/smart-app-launch/1.0.0/scopes-and-launch-context/ind...)をクリックして公式ページのURLを参照してください。この例では、user/*.*スコープを定義し、認証されたユーザーがすべての FHIR サーバーリソースに対して CRUD 操作を実行できるようにしています。

完璧です!Auth0アカウントがOAuth2サーバとして機能するように設定できました。

Angularアプリの設定

このアプリケーションはAngular 17で開発したかったのですが、残念ながらAuth0とそのライブラリの関連ドキュメントはAngular 16のものしかないので、簡単な方を選ぶこととしバージョン16で開発しました。

Angularプロジェクトを設定するには、app.module.tsページを開き、以下のコードを探します

設定する各パラメータの意味を見てみましょう。

  • domain:Auth0 でアプリケーションを作成したときに生成された ドメイン値
  • clientId: 上と同じく生成されたClient ID
  • audience: APIの識別子として設定したURL
  • uri: Auth0 TypeScriptライブラリに、そのURIを含むURLへのすべての呼び出しをインターセプトし、Auth0が検証時に返すAccess_tokenを組み込むように指示します(呼び出しのヘッダにAuthorizationパラメータを追加します: Bearer...)

これらの値を変更すると、AngularアプリケーションがAuth0で動作するように設定されます。次の記事では、ユーザーインターフェースからAuth0を呼び出す方法を詳しく説明します。

InterSystems IRIS for Healthの設定

このプロジェクトは、デプロイプロセス中にFHIRサーバーを自動的にインストールするように設定されているため、手順を省くことができます。今回のケースでは、FHIRサーバーのエンドポイントとして/smart/fhir/r5というURIを定義しました。FHIRの用語に馴染みのない方のために説明すると、r5とはFHIRの最新バージョンのことで、IRISで数ヶ月前から利用可能です。

IRISインスタンスを設定するには、まずDockerを起動し、プロジェクトで利用可能な3つのコンテナをデプロイする必要があります。プロジェクトのルートからターミナルで以下のコマンドを実行するだけです。

docker-compose up -d --build

これで、プロジェクトに存在するコンテナをビルドして実行できるようになります。Windowsユーザーの場合、Docker Desktopを使えば、このような画面が表示されるはずです。

Docker Desktop

ここでは3つのコンテナがあります。

  • iris: FHIRサーバが配置されているIRISインスタンス
  • smart-ui: NGINXからデプロイされたウェブアプリケーションのコードで、すべての接続が関連する証明書とSSLを経由するよう設定されています。
  • webgateway: 関連するApacheサーバー(正式版2023.1以降、プライベートWebサーバーは廃止されましたが、コミュニティ版ではまだ利用可能であることを覚えておいてください)。

ウェブゲートウェイ

繰り返しになりますが、OAuth2をFHIRサーバーで使用するためには、すべての接続がHTTPS経由で行われることが必須であるため、Apacheサーバーはそのタイプの呼び出しのみを受け付けるように設定する必要があります。 webgateway/shared/CSP.confファイルをみると、Apacheサーバの設定を担当する以下のセクションがあります

# SSL SECTION #
# Enable SSL/TLS (https://) on the Apache web server.
# The user is responsible for providing valid SSL certificates.
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile "/webgateway-shared/apache_webgateway.cer"
SSLCertificateKeyFile "/webgateway-shared/apache_webgateway.key"
Header add ACCESS-CONTROL-ALLOW-ORIGIN "*"
</VirtualHost>

443番ポートを経由するようにし、WebGatewayのURLはhttps://webgateway、アプリケーションからFHIRサーバへの呼び出しはこのURLにリダイレクトする必要があります。(ウェブゲートウェイは、Dockerコンテナによって作成されたネットワークに与えられたマスクです)

<

p>Angularからサーバーへのすべての呼び出しはURLhttps://localhost/smart/fhir/r5行われ、NGINXはそのlocalhostをwebgatewayにリダイレクトする役割を果たします。smart-ui/nginx.confを開くと、以下のような設定になっています。

 

この設定では、Webアプリケーションは443番ポートをリッスンし、URLに/を含むすべての呼び出しはAngularアプリケーションによって管理され、/smart/を含む呼び出しはすべてhttps://webgatewayにリダイレクトされます。
CORSによる頭痛の種を回避するproxy_set_headerには注意が必要です。Web Gatewayが他のサーバーからの呼び出しを拒否しないようにするには、Host ヘッダーの値を変更して、Web Gatewayのアドレスで設定する必要があります。

InterSystems IRIS

次に IRIS を Auth0 で動作するように設定する必要がありますが、そのためには IRIS を OAuth2 クライアントとして設定する必要があります。これを行うには、スーパーユーザ/SYS認証情報で管理ポータルにアクセスし、[System Administration (システム管理)] > [Security (セキュリティ)] > [OAuth 2.0 (OAuth 2.0)] > [Client (クライアント)] オプションにアクセスし、[Create Server Description (サーバ記述の作成)] をクリックし、発行者エンドポイントに Auth0 へのアプリケーション作成時に取得したドメイン値 (https://[MY_DOMAIN]/) を入力します。注意してください!URLは"/"で終わっていなければなりません。最後にSSL/TLSコンフィギュレーションを選択し、Discover and Saveをクリックします。

IRIS client

IRISインスタンスは自動的にAuth0から必要な情報を取得します

Issuer endpoint

先ほど設定したサーバにクライアントを追加するだけです。Client Configuration を押すと、アプリケーションとクライアントの名前を定義する新しい画面にアクセスできます。このクライアント名は、後で FHIR サーバを設定する際に使用します。

FHIRサーバ

プロジェクトの設定を完了する最後のステップは、接続に使用するOAuth2クライアントをFHIRサーバに伝えることです。コンフィギュレーションにアクセスするには、管理ポータルを開き、Health > FHIR > FHIR Configuration > Server Configurationを選択して、画面に表示されているエンドポイントを開きます。最後にOAuth Client Nameフィールドにクライアント・コンフィギュレーションを作成した名前を追加します。

FHIR OAuth Configuration

まとめ

さて、プロジェクトの設定は完了しました。次回は、Angularアプリケーションが各アクターとどのように相互運用するかを見ていきましょう。

ご清聴ありがとうございました!

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください