Share via


Azure API for FHIR に対する Azure Active Directory の ID 構成

医療データを扱う場合、データがセキュリティで保護されており、承認されていないユーザーやアプリケーションがアクセスできないようにすることが重要です。 FHIR サーバーは OAuth 2.0 を使用して、このデータのセキュリティを確保します。 Azure API for FHIR は、OAuth 2.0 ID プロバイダーの例である Azure Active Directory を使用してセキュリティ保護されます。 この記事では、FHIR サーバーの承認の概要と、FHIR サーバーにアクセスするためのトークンを取得するために必要な手順について説明します。 これらの手順はすべての FHIR サーバーと ID プロバイダーに適用されますが、この記事では、Azure API for FHIR を FHIR サーバーとして、Azure Active Directory (Azure AD) を ID プロバイダーとして説明します。

アクセス制御の概要

クライアント アプリケーションが Azure API for FHIR にアクセスするためには、アクセス トークンを提示する必要があります。 アクセス トークンは、クライアントの ID とロール、およびクライアントに与えられた特権に関する情報を伝達する、署名付きの、Base64 でエンコードされたプロパティ (要求) のコレクションです。

トークンを取得するには多くの方法がありますが、Azure API for FHIR では、正しい要求を含む適切に署名されたトークンである限り、トークンの取得方法は考慮されません。

たとえば、 承認コード フローを使用する場合と同様に、FHIR サーバーにアクセスする場合は、次の 4 つの手順を実行します。

FHIR の承認

  1. クライアントは Azure AD の /authorize エンドポイントに要求を送信します。 Azure AD は、クライアントをサインイン ページにリダイレクトします。そこで、ユーザーは適切な資格情報 (ユーザー名とパスワード、または 2 要素認証など) を使用して認証されます。 承認コードの取得に関する詳細を参照してください。 認証が成功すると、"承認コード" がクライアントに返されます。 Azure AD では、この承認コードをクライアント アプリケーション登録で構成された登録済みの応答 URL にのみ返すことを許可します。
  2. クライアント アプリケーションは、Azure AD の /token エンドポイントで "アクセス トークン" の承認コードを交換します。 トークンを要求する場合、クライアント アプリケーションでクライアント シークレット (アプリケーション パスワード) を指定する必要がある場合があります。 アクセス トークンの取得に関する詳細を参照してください。
  3. クライアントは、すべての患者を検索するために、Azure API for FHIR (例: GET /Patient) に対して要求を行います。 クライアントが要求を行うと、HTTP 要求ヘッダーにアクセス トークンが含まれます。たとえば Authorization: Bearer eyJ0e...、 は eyJ0e... Base64 でエンコードされたアクセス トークンを表します。
  4. Azure API for FHIR は、トークンに適切な要求 (トークン内のプロパティ) が含まれていることを検証します。 すべてがチェックされると、要求が完了し、結果と共に FHIR バンドルがクライアントに返されます。

Azure API for FHIR はユーザー資格情報の検証に関与せず、トークンを発行しない点に注意してください。 認証とトークンの作成は Azure AD によって行われます。 Azure API for FHIR は、トークンが正しく署名されていること (本物であること) と、適切な要求があることを検証するだけです。

アクセス トークンの構造

高速医療相互運用性リソース (FHIR®) アプリケーションの開発には、多くの場合、アクセスの問題のデバッグが含まれます。 クライアントが Azure API for FHIR へのアクセスを拒否された場合は、アクセス トークンの構造と、トークンの内容 (要求) を検査するためにデコードする方法を理解すると便利です。

FHIR サーバーでは、通常、JSON Web トークン (JWT、"ジョット" と発音する場合がある) が想定されています。 これは、次の 3 つの部分で構成されています。

パート 1: ヘッダー。次のようになります。

    {
      "alg": "HS256",
      "typ": "JWT"
    }

パート 2: ペイロード (要求)。次に例を示します。

    {
     "oid": "123",
     "iss": "https://issuerurl",
     "iat": 1422779638,
     "roles": [
        "admin"
      ]
    }

パート 3: 署名。これは、Base64 でエンコードされたヘッダーとペイロードのコンテンツを連結し、ヘッダーに指定されたアルゴリズム (alg) に基づいてそれらの暗号化ハッシュを計算することによって計算されます。 サーバーは、ID プロバイダーから公開キーを取得し、このトークンが特定の ID プロバイダーによって発行されたものであり、改ざんされていないことを検証できます。

完全なトークンは、これら 3 つのセグメントの Base64 でエンコードされた (実際には Base64 URL でエンコードされた) バージョンで構成されます。 これらの 3 つのセグメントは連結され、. (ドット) で区切られます。

トークンの例を次に示します。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvaWQiOiIxMjMiLCAiaXNzIjoiaHR0cHM6Ly9pc3N1ZXJ1cmwiLCJpYXQiOjE0MjI3Nzk2MzgsInJvbGVzIjpbImFkbWluIl19.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI

トークンは、https://jwt.ms などのツールを使用してデコードおよび検査できます。 トークンをデコードした結果は次のようになります。

{
  "alg": "HS256",
  "typ": "JWT"
}.{
  "oid": "123",
  "iss": "https://issuerurl",
  "iat": 1422779638,
  "roles": [
    "admin"
  ]
}.[Signature]

アクセス トークンを取得する

前述のように、Azure AD からトークンを取得する方法はいくつかあります。 詳細については、 Azure AD 開発者向けドキュメントを参照してください

次のいずれかの認証プロトコルを使用します。

トークンを取得するための他のバリエーション (フローなど) があります。 詳細については、 Azure AD のドキュメント を参照してください。 Azure API for FHIR を使用する場合、 Azure CLI を使用してアクセス トークン (デバッグ目的など) を取得するためのショートカットがいくつかあります。

次のステップ

このドキュメントでは、Azure AD を使用した Azure API for FHIR へのアクセスのセキュリティ保護に関連する基本的な概念をいくつか学習しました。 Azure API for FHIR サービスをデプロイする方法については、次を参照してください。

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