翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Blu Age モダナイズされたメインフレームアプリケーションで Microsoft Entra ID ベースの認証を実装する
Vishal Jaswani と Rimpy Tewani、Amazon Web Services
概要
Refactor with AWS Mainframe ModernizationAWS Blu Age などのリファクタリングパターンを使用してモダナイズされるメインフレームアプリケーションでは、認証メカニズムを新しいアプリケーションアーキテクチャに慎重に統合する必要があります。この統合は通常、モダナイゼーション後のアクティビティとして処理されます。タスクは複雑で、最新のセキュリティ標準やクラウドネイティブプラクティスに合わせて既存の認証システムを移行または外部化することが多くあります。開発者は、モダナイズされたアプリケーションのランタイム環境とライブラリの制約内で作業しながら、認証を効果的に実装する方法を検討する必要があります。モダナイゼーション後、 は AWS Blu Age の最新のコードを Amazon Cognito や Microsoft Entra ID
このパターンでは、認証プロバイダーが Microsoft Entra ID の場合に、調査やトライアルに時間を費やすことなく、モダナイズされたアプリケーションに認証メカニズムを実装する方法について説明します。このパターンは以下を提供します。
Microsoft Authentication Library (MSAL) および認証実装に不可欠なその他の Microsoft Entra ID ドキュメントのフィールドテスト済みおよび関連する Angular ライブラリ。
OAuth 2.0 を使用して Spring Security を有効にするために必要な AWS Blu Age ランタイムの設定。
認証されたユーザーの ID をキャプチャし、 AWS Blu Age ランタイムに渡すライブラリ。
実装が推奨されるセキュリティ対策。
Microsoft Entra ID のセットアップでよく発生する問題のトラブルシューティングのヒント。
注記
このパターンでは、AWS プロフェッショナルサービスの
前提条件と制限
前提条件
AWS Blu Age メインフレームモダナイゼーションリファクタリングツールによって生成されたモダナイズされたアプリケーション。このパターンでは、CardDemo
をサンプルオープンソースのメインフレームアプリケーションとして使用します。 AWS Blu Age OAuth 拡張機能ライブラリ。AWS プロフェッショナルサービスと
のエンゲージメント中に AWS Blu Age チームによって提供されます。 モダナイズされたアプリケーションをデプロイしてテスト AWS アカウント するアクティブな 。
AWS Blu Age 設定ファイルと Microsoft Entra ID の基礎に精通していること。
制約事項
このパターンでは、OAuth 2.0 認証と基本的なトークンベースの認可フローについて説明します。高度な認可シナリオときめ細かなアクセスコントロールメカニズムは対象範囲外です。
一部の AWS のサービス は では使用できません AWS リージョン。リージョンの可用性については、AWS のサービス 「リージョン別
」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」を参照して、サービスのリンクを選択します。
製品バージョン
このパターンは、以下を使用して開発されました。
AWS Blu Age ランタイムバージョン 4.1.0 (このパターンは下位互換性があるそれ以降のバージョンでも機能します)
MSAL ライブラリバージョン 3.0.23
Java Development Kit (JDK) バージョン 17
Angular バージョン 16.1
アーキテクチャ
ソーステクノロジースタック
一般的なメインフレーム環境では、認証はユーザープロファイルを通じて実装されます。これらのプロファイルは、システムへのユーザーを識別し、サインインできるユーザーを定義し、ユーザーがシステムリソースで実行できる関数を指定します。ユーザープロファイルは、セキュリティ担当者またはセキュリティ管理者によって管理されます。
ターゲットテクノロジースタック
Microsoft Entra ID
最新の Java Spring Boot ベースのバックエンド
AWS Blu Age ランタイム
OAuth 2.0 を使用した Spring Security
角度付きシングルページアプリケーション (SPA)
ターゲット アーキテクチャ
AWS Blu Age ランタイムはデフォルトで OAuth 2.0 ベースの認証をサポートしているため、パターンはその標準を使用してバックエンド APIsを保護します。
次の図は、プロセスフローを示しています。
注記
この図には、データベースのモダナイゼーションの例として Amazon Aurora が含まれていますが、Aurora はこのパターンのステップに含まれていません。

各パラメータの意味は次のとおりです。
ユーザーは Microsoft Entra ID で認証を試みます。
Microsoft Entra ID は、アプリケーションが後続の呼び出しで使用する更新、アクセス、および ID トークンを返します。
MSAL インターセプターは、 AWS Blu Age ランタイムを呼び出す HTTPS リクエストの
Authorization
ヘッダーにアクセストークンを含めます。AWS Blu Age
extension-oauth
ライブラリは、 AWS Blu Age ランタイム設定ファイル (application-main.yml
) を使用して ヘッダーからユーザー情報を抽出し、この情報をSharedContext
オブジェクトに配置して、ビジネスロジックがそれを消費できるようにします。注記
SharedContext
は Blu Age AWS が提供するランタイムコンポーネントで、モダナイズされたアプリケーション全体でアプリケーションのコンテキストと状態情報を管理します。 AWS Blu Age ランタイムのコンポーネントと更新の詳細については、 AWS Mainframe Modernization ドキュメントのAWS 「Blu Age リリースノート」を参照してください。application-main.yml
ファイルの詳細については、 AWS Mainframe Modernization ドキュメントのAWS 「Blu Age ランタイムの設定をセットアップする」を参照してください。AWS Blu Age ランタイムは、トークンが存在するかどうかを確認します。
トークンが存在する場合、Microsoft Entra ID と通信してトークンの有効性をチェックします。
トークンが存在しない場合、 AWS Blu Age ランタイムは HTTP ステータスコード 403 のエラーを返します。
トークンが有効な場合、 AWS Blue Age ランタイムはビジネスロジックの継続を許可します。トークンが無効の場合、 AWS Blu Age ランタイムは HTTP ステータスコード 403 のエラーを返します。
OAuth 2.0 ワークフロー
OAuth 2.0 ワークフローの概要図については、Microsoft Entra ドキュメント
ツール
AWS のサービス
AWS Mainframe Modernization には、メインフレームから AWS マネージドランタイム環境への移行とモダナイゼーションの計画と実装に役立つツールとリソースが用意されています。 AWS Blu Age が提供するこのサービスのリファクタリング機能を使用して、レガシーメインフレームアプリケーションを変換およびモダナイズできます。
コードリポジトリ
CardDemo アプリケーションが更新され、Microsoft Entra ID との統合が実証されました。このパターンのコードには、GitHub リポジトリ
バックエンド設定
このパターンでは、バックエンドアプリケーションで OAuth 2.0 を使用して Spring Security を有効にするために、application-main.yml
設定ファイルを変更する必要があります。 .yml
ファイルは次のようになります。
gapwalk-application.security: enabled gapwalk-application: security: identity: oauth issuerUri: ${issuerUrl} claim: claims: - claimName: upn claimMapValue: username spring: autoconfigure: exclude: - org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration - org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration security: oauth2: client: registration: azure: client-id: {clientId} client-secret: ${clientSecret} provider: azure authorization-grant-type: authorization_code redirect-uri: ${redirectUri} scope: openid provider: azure: authorization-uri: ${gapwalk-application.security.issuerUri}/oauth2/v2.0/authorize token-uri: ${gapwalk-application.security.issuerUri}/oauth2/v2.0/token jwk-set-uri: ${gapwalk-application.security.issuerUri}/discovery/v2.0/keys resourceserver: jwt: jwk-set-uri: ${gapwalk-application.security.issuerUri}/discovery/v2.0/keys
AWS Blu Age OAuth 拡張フィルターライブラリ
AWS Blu Age OAuth 拡張機能ライブラリは、AWS プロフェッショナルサービスと
このライブラリは、前のコードブロックにapplication-main.yml
示されているclaim.claims
設定を読み取ります。この設定はリストです。リストの各項目には、 claimName
と の 2 つの値がありますclaimMapValue
。 claimName
はフロントエンドによって送信される JSON ウェブトークン (JWT) のキー名を表し、 のキーの名前claimMapValue
を表しますSharedContext
。たとえば、バックエンドでユーザー ID をキャプチャする場合は、 claimName
を Microsoft Entra ID によってuserId
提供される を保持する JWT のキー名に設定し、 をキー名claimMapValue
に設定してバックエンドコードでユーザー ID を取得します。
たとえば、 UserId
で を設定した場合claimMapValue
、次のコードを使用してユーザー ID を抽出できます。
SharedContext.get().getValue("userId", [UserId]);
ベストプラクティス
このパターンの実装では、以下の重要なセキュリティ上の考慮事項を考慮してください。
重要
このパターンは、認証統合の基盤を提供します。本番環境にデプロイする前に、ビジネス要件に基づいて、このセクションで説明されているセキュリティ対策に加えて、セキュリティ対策を実装することをお勧めします。
AWS 設定のセキュリティ。 機密設定値
application-main.yml
を から に移動します AWS Secrets Manager。たとえば、Secrets Manager を使用して次のプロパティを設定します。security: oauth2: client: registration: azure: client-id: {clientId} client-secret: ${clientSecret}
Secrets Manager を使用して AWS Blu Age パラメータを設定する方法の詳細については、 AWS Mainframe Modernization ドキュメントのAWS 「Blu Age ランタイムシークレット」を参照してください。
ランタイム環境保護。適切な AWS セキュリティコントロールを使用して、モダナイズされたアプリケーション環境を設定します。
server: tomcat: remoteip: protocol-header: X-Forwarded-Proto remote-ip-header: X-Forwarded-For forward-headers-strategy: NATIVE
Amazon CloudWatch のログ記録。ファイル の追加を検討してください
logback-spring.xml to src/main/resources
。<configuration> <appender name="CLOUDWATCH" class="com.amazonaws.services.logs.logback.CloudWatchAppender"> <logGroup>/aws/bluage/application</logGroup> <logStream>${AWS_REGION}-${ENVIRONMENT}</logStream> <layout> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </layout> </appender> <root level="INFO"> <appender-ref ref="CLOUDWATCH"/> </root> </configuration>
CloudWatch でトレースを有効にする方法については、CloudWatch ドキュメントの「トレースとログの相関を有効にする」を参照してください。
トークンの設定と処理。セキュリティ要件に合わせて Microsoft Entra ID でトークンの有効期間を設定します。アクセストークンを 1 時間以内に期限切れに設定し、トークンを更新して 24 時間以内に期限切れにします。 AWS Blu Age ランタイム設定 (
application-main.yml
) で、JWT 検証が Entra ID アプリケーション登録の正確な発行者 URI とオーディエンス値で正しく設定されていることを確認します。トークンの有効期限が切れて更新された場合:
Angular アプリケーションのエラーインターセプターは、MSAL を介して新しいトークンを取得することで 401 レスポンスを処理します。
新しいトークンは、後続のリクエストとともに送信されます。
AWS Blu Age ランタイムの OAuth フィルターは、新しいトークンを検証し、現在のユーザー情報
SharedContext
で自動的に更新します。これにより、ビジネスロジックはSharedContext.get().getValue()
呼び出しを通じて有効なユーザーコンテキストに引き続きアクセスできます。
AWS Blu Age ランタイムコンポーネントとその更新の詳細については、AWS 「Blu Age リリースノート」を参照してください。
AWS Blu Age ランタイムセキュリティ。 AWS Blu Age が提供する
oauth2-ext
ライブラリは、適切なファイルアクセス許可を持つ正しい共有ディレクトリの場所 ({app-server-home}/shared/
) に配置する必要があります。ログのSharedContext
オブジェクト母集団をチェックして、ライブラリが JWTsからユーザー情報を正常に抽出していることを確認します。特定のクレーム設定。で
application-main.yml
、Microsoft Entra ID から必要なクレームを明示的に定義します。たとえば、ユーザーの E メールとロールをキャプチャするには、以下を指定します。gapwalk-application: security: claim: claims: - claimName: upn claimMapValue: username - claimName: roles claimMapValue: userRoles - claimName: email claimMapValue: userEmail
エラー処理。エラー処理を追加して、Angular アプリケーションの認証の失敗に対処します。次に例を示します。
@Injectable() export class AuthErrorInterceptor implements HttpInterceptor { intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { return next.handle(request).pipe( catchError((error: HttpErrorResponse) => { if (error.status === 401) { // Handle token expiration this.authService.login(); } if (error.status === 403) { // Handle unauthorized access this.router.navigate(['/unauthorized']); } return throwError(() => error); }) ); } }
セッションタイムアウト設定。 AWS Blu Age ランタイムと Microsoft Entra ID の両方でセッションタイムアウト設定を構成します。たとえば、次のコードを
application-main.yml
ファイルに追加します。server: servlet: session: timeout: 3600 # 1 hour in seconds
MsalGuard。不正アクセスを防ぐために、保護されたすべてのルートに MsalGuard 機能を実装する必要があります。例:
const routes: Routes = [ { path: '', redirectTo: '/transaction-runner', pathMatch: 'full' }, { path: 'transaction-runner', component: TransactionRunnerComponent, canActivate:guards }, { path: 'user-info', component: UserInfoComponent, canActivate:guards }, { path: 'term/:transid/:commarea', component: TermComponent, canActivate:guards }, { path: 'code', component: TransactionRunnerComponent } ];
MsalGuard 保護がないルートには認証なしでアクセスでき、機密性の高い機能が公開される可能性があります。認証を必要とするすべてのルートに設定にガードが含まれていることを確認します。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
Microsoft Azure アカウントを設定して Entra ID を作成します。 | オプションと手順については、Microsoft Azure ウェブサイト | アプリ開発者 |
アプリケーションで Microsoft Entra ID を設定します。 | Microsoft Entra ID B2C (Azure AD B2C) 認証を Angular SPA に追加する方法については、Microsoft のドキュメント
| アプリ開発者 |
タスク | 説明 | 必要なスキル |
---|---|---|
GitHub リポジトリをクローンして、認証に必要な Angular コードを取得します。 | 次のコマンドを実行して、このパターンで提供されている GitHub リポジトリ
| アプリ開発者 |
AWS Blu Age モダナイズされたコードを Tomcat サーバーにデプロイして認証を実装します。 | Tomcat と Angular 開発サーバーを含むローカル環境を設定するには、 AWS プロフェッショナルサービスとのカスタマーエンゲージメントの一環として AWS Blu Age チームが提供するインストール手順に従います。 | アプリ開発者 |
タスク | 説明 | 必要なスキル |
---|---|---|
AWS Blu Age ランタイムセキュリティを有効にして、AWS Blu Age REST API エンドポイントを保護します。 | AWS Blu Age ランタイムが使用する
| アプリ開発者 |
ローカル環境のサンプルコードを Blu Age のモダナイズされた Angular コードベースに組み込みます。 | AWS Blu Age のモダナイズされた Angular コードベースに例を組み込む方法については、このパターンの前半のコードリポジトリセクションを参照してください。 | アプリ開発者 |
| AWS Blu Age モダナイズされたアプリケーションが使用できるように、
| アプリ開発者 |
タスク | 説明 | 必要なスキル |
---|---|---|
フロントエンドアプリケーションをデプロイします。 | 次のコマンドを実行して、フロントエンドアプリケーションをローカルで起動します。
注記
| アプリ開発者 |
バックエンドアプリケーションを起動します。 | Eclipse で Tomcat サーバーを起動します。 | アプリ開発者 |
タスク | 説明 | 必要なスキル |
---|---|---|
ログイン機能をテストします。 | ローカルにデプロイされたアプリケーションに でアクセス 注記ここで HTTP はデモンストレーションの目的で使用されます。本番稼働環境やその他のパブリックアクセス可能な環境では、セキュリティに HTTPS を使用する必要があります。ローカル開発でも、可能であれば HTTPS を設定することをお勧めします。 Microsoft ログインプロンプトが表示され、Microsoft Entra ID で設定されたユーザーにアプリケーションへのアクセスを許可する必要があります。 | アプリ開発者 |
リクエストで認可ヘッダーをテストします。 | 注記次の手順では、例として CardDemo
| アプリ開発者 |
ログアウト機能をテストします。 | 終了を選択してログアウトし、アプリケーションに再度アクセスしてみてください。新しいログインプロンプトが表示されます。 | アプリ開発者 |
トラブルシューティング
問題 | ソリューション |
---|---|
Microsoft Entra ID によって発行されたトークンは、Spring Boot OAuth 2.0 セキュリティと互換性がありません。 | 問題の解決については、OAuth ブログの「Microsoft Entra ID OAuth Flow |
トークン関連の一般的な質問。 | JWT トークンの内容をデコードして表示するには、https://jwt.io/ |
関連リソース
AWS Blu Age を使用したアプリケーションのリファクタリングについては、 AWS Mainframe Modernization ドキュメントを参照してください。
OAuth 2.0 の仕組みについては、OAuth 2.0 ウェブサイト
を参照してください。 Microsoft Authentication Library (MSAL) の概要については、Microsoft Entra ドキュメント
を参照してください。 AS/400 システムのユーザープロファイルの詳細については、IBM i (AS400) チュートリアル
を参照してください。 Microsoft ID プラットフォームの OAuth 2.0 および OpenID Connect (OIDC) 認証フローについては、Microsoft Entra ドキュメント
を参照してください。