

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Lambda オーソライザーによるカスタムトークン検証
<a name="dicomweb-oidc-how"></a>

HealthImaging は、Lambda オーソライザーを使用するアーキテクチャを通じて OIDC サポートを実装し、お客様が独自のトークン検証ロジックを実装できるようにします。この設計により、OIDC 互換 ID プロバイダー (IdPs) の多様な環境とさまざまなトークン検証方法に対応して、トークンの検証方法とアクセス決定の適用方法を柔軟に制御できます。

## 認証のフロー
<a name="dicomweb-oidc-authentication-flow"></a>

認証の仕組みの概要は次のとおりです。

1. **クライアントが DICOMweb API を呼び出す:** アプリケーションは選択した OIDC ID プロバイダーで認証し、署名付き ID トークン (JWT) を受け取ります。DICOMweb HTTP リクエストごとに、クライアントは認可ヘッダー (通常はベアラートークン) に OIDC アクセストークンを含める必要があります。リクエストがデータに到達する前に、HealthImaging は受信リクエストからこのトークンを抽出し、設定した Lambda オーソライザーを呼び出します。

   1. ヘッダーは通常、 の形式に従います`Authorization: Bearer <token>`。

1. **初期検証:** HealthImaging は、Lambda 関数を不必要に呼び出すことなく、明らかに無効または期限切れのトークンをすばやく拒否するために、アクセストークンクレームを検証します。HealthImaging は、Lambda オーソライザーを呼び出す前に、アクセストークン内の特定の標準クレームの初期検証を実行します。

   1. `iat` (発行時): HealthImaging は、トークンの発行時間が許容範囲内であるかどうかをチェックします。

   1. `exp` (有効期限): HealthImaging はトークンの有効期限が切れていないことを確認します。

   1. `nbf` (時間前ではない): 存在する場合、HealthImaging は有効な開始時刻より前にトークンが使用されていないことを確認します。

1. **HealthImaging は Lambda オーソライザーを呼び出します。**最初のクレーム検証に合格すると、HealthImaging は追加のトークン検証をお客様が設定した Lambda オーソライザー関数に委任します。HealthImaging は、抽出されたトークンおよびその他の関連するリクエスト情報を Lambda 関数に渡します。Lambda 関数は、トークンの署名とクレームを検証します。

1. **ID プロバイダーとの検証:** Lambda には、ID トークンの署名をチェックし、より広範なトークン検証 (発行者、対象者、カスタムクレームなど) を実行し、必要に応じてそれらのクレームを IdP に対して検証するカスタムコードが含まれています。

1. オー**ソライザーはアクセスポリシーを返します。**検証に成功すると、Lambda 関数は認証された使用に対する適切なアクセス許可を決定します。次に、Lambda オーソライザーは、付与される一連のアクセス許可を表す IAM ロールの amazon リソースネーム (ARN) を返します。

1. **リクエストの実行:** 引き受けた IAM ロールに必要なアクセス許可がある場合、HealthImaging はリクエストされた DICOMWeb リソースの返却に進みます。アクセス許可が不十分な場合、HealthImaging はリクエストを拒否し、適切なエラーレスポンスエラー (403 Forbidden) を返します。

**注記**  
AWS HealthImaging サービスによって管理されていないオーソライザー Lambda 関数。 AWS アカウントで実行されます。お客様は、関数の呼び出しと実行時間に対して、HealthImaging 料金とは別に課金されます。

## アーキテクチャの概要
<a name="dicomweb-oidc-architecture-overview"></a>

![\[ワークフローを示す図: クライアントがトークンを送信、Lambda オーソライザーが検証、HealthImaging プロセスリクエスト\]](http://docs.aws.amazon.com/ja_jp/healthimaging/latest/devguide/images/security-oidc-workflow-lambda.png)


## 前提条件
<a name="dicomweb-oidc-prerequisites"></a>

### アクセストークンの要件
<a name="dicomweb-oidc-token-requirements"></a>

HealthImaging では、アクセストークンが JSON Web Token (JWT) 形式である必要があります。多くの ID プロバイダー (IDPs ではアクセストークンフォームを選択または設定できます。統合を進める前に、選択した IDP が JWT トークンを発行できることを確認します。

トークンの形式  
アクセストークンは JWT (JSON Web Token) 形式である必要があります

必要な請求    
`exp` (有効期限)  
トークンがいつ無効になるかを指定する必須クレーム。  
+ UTC の現在の時刻より後である必要があります
+ トークンが無効になったときを表します  
`iat` (発行先)  
トークンの発行日時を指定する必須クレーム。  
+ UTC の現在の時刻より前である必要があります
+ UTC の現在の時刻より 12 時間前にすることはできません
+ これにより、トークンの最大有効期間は 12 時間になります。  
`nbf` (以前ではありません)  
トークンを使用できる最も早い時刻を指定するオプションクレーム。  
+ 存在する場合、HealthImaging によって評価されます
+ トークンを受け入れない時間を指定します。

### Lambda オーソライザーの応答時間の要件
<a name="dicomweb-oidc-lambda"></a>

HealthImaging は、最適な API パフォーマンスを確保するために、Lambda オーソライザーレスポンスに厳格なタイミング要件を適用します。Lambda 関数は 1 秒以内に を返す**必要があります**。

## ベストプラクティス
<a name="dicomweb-oidc-best-practices"></a>

### トークン検証の最適化
<a name="dicomweb-oidc-optimization"></a>
+ 可能であれば JWKS (JSON ウェブキーセット) をキャッシュする
+ 可能な場合は有効なアクセストークンをキャッシュする
+ ID プロバイダーへのネットワーク呼び出しを最小限に抑える
+ 効率的なトークン検証ロジックを実装する

### Lambda 設定
<a name="dicomweb-oidc-lambda-configuration"></a>
+ Python および Node.js ベースの関数は通常、より高速に初期化します。
+ ロードする外部ライブラリの量を減らす
+ 一貫したパフォーマンスを確保するために適切なメモリ割り当てを設定する
+ CloudWatch メトリクスを使用して実行時間をモニタリングする

## OIDC 認証の有効化
<a name="dicomweb-oidc-enablement"></a>
+ OIDC 認証****は、**新しい**データストアを作成する場合にのみ有効にできます
+ 既存のデータストアの OIDC の有効化は API ではサポートされていません
+ 既存のデータストアで OIDC を有効にするには、 サポートに連絡する必要があります AWS 。