本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 AWS Blu Age 的现代化大型机应用程序中实施基于 Microsoft Entra ID 的身份验证
Vishal Jaswani 和 Rimpy Tewani,Amazon Web Services
摘要
使用重构模式进行现代化改造的大型机应用程序,例如使用 AWS Blu Age AWS Mainframe Modernization 重构的应用程序,需要将身份验证机制仔细集成到新的应用程序架构中。这种整合通常作为现代化后的活动来解决。这项任务可能很复杂,通常涉及现有身份验证系统的迁移或外部化,以符合现代安全标准和云原生实践。开发人员需要考虑如何在现代化应用程序的运行时环境和库的限制下高效地实现身份验证。现代化后, AWS 提供了一些方法可以让你更轻松地将 AWS Blu Age 现代代码与身份和访问管理系统(例如 Amazon Cognito 和 Microsoft En tra ID
此模式说明了当身份验证提供者是 Microsoft Entra ID 时,如何在现代化应用程序中实现身份验证机制,而无需花时间进行研究和试验。该模式提供:
来自微软身份验证库 (MSAL) 和其他对身份验证实施至关重要的微软 Entra ID 文档中经过现场测试的相关Angular库。
使用 OAuth 2.0 启用 Spring Security 需要在 AWS Blu Age 运行时进行配置。
一个库,用于捕获经过身份验证的用户的身份并将其传递给 AWS Blu Age Runtime。
我们建议实施的安全措施。
微软 Entra ID 设置中常见问题的疑难解答提示。
注意
此模式使用 AWS Blu A OAuth ge 扩展库,该库作为客户AWS 专业服务
先决条件和限制
先决条件
限制
此模式涵盖了 OAuth 2.0 身份验证和基于令牌的基本授权流程。高级授权场景和精细访问控制机制不在范围内。
有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅AWS 服务 按地区划分
。有关特定终端节点,请参阅服务终端节点和配额,然后选择服务的链接。
产品版本
这种模式是通过使用以下方法开发的:
AWS Blu Age Runtime 版本 4.1.0(该模式也适用于向后兼容的更高版本)
MSAL 库版本 3.0.23
Java 开发套件 (JDK) 版本 17
Angular 版本 16.1
架构
源技术堆栈
在典型的大型机环境中,身份验证是通过用户配置文件实现的。这些配置文件识别系统的用户,定义谁可以登录,并指定用户可以对系统资源执行哪些功能。用户配置文件由安全人员或安全管理员管理。
目标技术堆栈
Microsoft Entra ID
基于 Java 春季启动的现代化后端
AWS 蓝光时代运行时间
OAuth 2.0 的春季安全
Angular 单页应用程序 (SPA)
目标架构
AWS 默认情况下,Blu Age 运行时支持 OAuth 基于 2.0 的身份验证,因此该模式使用该标准来保护后端。 APIs
下图说明了流程流。
注意
该图以Amazon Aurora作为数据库现代化的示例,尽管Aurora未包含在此模式的步骤中。

其中:
用户尝试使用微软 Entra ID 进行身份验证。
Microsoft Entra ID 返回应用程序在后续调用中使用的刷新、访问和 ID 令牌。
MSAL 拦截器在调用 AWS Blu Age Runtime 的 HTTPS 请求
Authorization
标头中包含访问令牌。AWS Blu Age
extension-oauth
库使用 Bl AWS u Age Runtime 配置文件 (application-main.yml
) 从标题中提取用户信息,并将这些信息放在SharedContext
对象中,以便业务逻辑可以消耗这些信息。注意
SharedContext
是 AWS Blu Age 提供的运行时组件,用于管理现代化应用程序中的应用程序上下文和状态信息。有关 AWS Blu Age 运行时组件和更新的更多信息,请参阅 AWS Mainframe Modernization 文档中的 AWS Blu Age 发行说明。有关该application-main.yml
文件的更多信息,请参阅 AWS Mainframe Modernization 文档中的为 AWS Blu Age Runtime 设置配置。AWS Blu Age 运行时会检查令牌是否存在。
如果该令牌存在,它会通过与 Microsoft Entra ID 通信来检查令牌的有效性。
如果令牌不存在, AWS Blu Age Runtime 将返回错误,HTTP 状态码为 403。
如果令牌有效,则 AWS Blue Age Runtime 允许业务逻辑继续运行。如果令牌无效, AWS Blu Age Runtime 将返回错误,HTTP 状态码为 403。
OAuth 2.0 工作流程
有关 OAuth 2.0 工作流程的高级示意图,请参阅 Microsoft Entra 文档
工具
AWS 服务
AWS Mainframe Modernization提供工具和资源,帮助您规划和实施从大型机到 AWS 托管运行时环境的迁移和现代化。您可以使用 AWS Blu Age 提供的此服务的重构功能对您的传统大型机应用程序进行转换和现代化改造。
代码存储库
该 CardDemo 应用程序已更新,以演示与微软 Entra ID 的集成。您可以从GitHub 存储库中访问此模式的
后端配置
此模式需要更改application-main.yml
配置文件才能通过在后端应用程序上使用 OAuth 2.0 来启用 Spring Security。 该.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 A OAuth ge 扩展库由 AWS Blu Age 团队在您使用AWS 专业服务
该库读取上一个代码块中显示application-main.yml
的文件中的claim.claims
配置。此配置是一个列表。列表中的每项都提供两个值:claimName
和claimMapValue
。 claimName
表示前端发送的 JSON Web 令牌 (JWT) 中的密钥名称,claimMapValue
也是中密钥的名称。SharedContext
例如,如果要在后端捕获用户 ID,请设置为 claimName
JWT 中保存 Microsoft Entra ID 提供的密钥名称,然后设置为claimMapValue
密钥名称以在后端代码中获取用户 ID。userId
例如,如果您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
亚马逊 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
) 中,确保使用您的 Entra ID 应用程序注册中确切的颁发者 URI 和受众值正确配置 JWT 验证。当令牌到期并刷新时:
Angular应用程序的错误拦截器通过MSAL获取新令牌来处理401响应。
新令牌与后续请求一起发送。
AWS Blu Age Runtime 的 OAuth 过滤器会验证新令牌,并
SharedContext
使用当前用户信息自动更新。这可确保业务逻辑继续通过SharedContext.get().getValue()
调用访问有效的用户上下文。
有关 AWS Blu Age Runtime 组件及其更新的更多信息,请参阅 AWS Blu Age 发行说明。
AWS Blu Age 运行时安全。 AWS Blu Age 提供的
oauth2-ext
库必须放置在正确的共享目录位置 ({app-server-home}/shared/
) 中,并具有适当的文件权限。 JWTs 通过检查日志中的SharedContext
对象群来验证库是否成功地从中提取用户信息。具体的索赔配置。在中
application-main.yml
,明确定义你需要从 Microsoft Entra ID 中获得的声明。例如,要捕获用户的电子邮件和角色,请指定: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 保护的路由无需身份验证即可访问,这可能会暴露敏感功能。确保所有需要身份验证的路由的配置中都包含防护。
操作说明
Task | 描述 | 所需技能 |
---|---|---|
设置微软 Azure 账户来创建 Entra ID。 | 有关选项和说明,请访问微软 Azure 网站 | 应用程序开发人员 |
在你的应用程序中设置 Microsoft Entra ID。 | 要了解如何将微软 Entra ID B2C(Azure AD B2C)身份验证添加到 Angular SPA,请参阅微软文档。
| 应用程序开发人员 |
Task | 描述 | 所需技能 |
---|---|---|
克隆 GitHub 存储库以获取身份验证所需的 Angular 代码。 | 运行以下命令,将此模式提供的GitHub 存储库
| 应用程序开发人员 |
在 Tomcat 服务器上部署 AWS Blu Age 现代化代码以实现身份验证。 | 要设置包括 Tomcat 和 Angular 开发服务器在内的本地环境,请按照 AWS Blu Age 团队提供的安装步骤进行操作,这是客户参与 AWS 专业服务的一部分。 | 应用程序开发人员 |
Task | 描述 | 所需技能 |
---|---|---|
启用 AWS Blu Age 运行时安全以保护 AWS Blu Age REST API 终端节点。 | 按如下方式配置 AWS Blu Age 运行时使用的
| 应用程序开发人员 |
将本地环境中的示例代码整合到您的 Blu Age 现代化 Angular 代码库中。 | 有关如何将该示例整合到 AWS Blu Age 现代化的 Angular 代码库中的信息,请参阅本模式前面的 “代码存储库” 部分。 | 应用程序开发人员 |
将 | 将该
| 应用程序开发人员 |
Task | 描述 | 所需技能 |
---|---|---|
部署前端应用程序。 | 运行以下命令在本地启动前端应用程序:
注意在 | 应用程序开发人员 |
启动后端应用程序。 | 在 Eclipse 中启动 Tomcat 服务器。 | 应用程序开发人员 |
Task | 描述 | 所需技能 |
---|---|---|
测试登录功能。 | 访问本地部署的应用程序, 注意此处使用 HTTP 仅用于演示目的。在生产环境或其他可公开访问的环境中,为了安全起见,必须使用 HTTPS。即使是本地开发,我们也建议您尽可能设置 HTTPS。 应该会出现微软登录提示,并且应该允许在 Microsoft Entra ID 中配置的用户访问该应用程序。 | 应用程序开发人员 |
测试请求中的授权标头。 | 注意以下步骤以该CardDemo
| 应用程序开发人员 |
测试注销功能。 | 选择 “退出” 注销,然后尝试再次访问该应用程序。它应该会显示一个新的登录提示。 | 应用程序开发人员 |
故障排除
事务 | 解决方案 |
---|---|
微软 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 网站
。 有关微软身份验证库 (MSAL) 的概述,请参阅微软 Entra 文档
。 有关 AS/400 系统上用户配置文件的信息,请参阅 IBM i (AS400)
教程。 有关微软身份平台中的 OAuth 2.0 和 OpenID Connect (OIDC) 身份验证流程,请参阅微软 Entra 文档。