Implemente a autenticação baseada no Microsoft Entra ID em um aplicativo de AWS mainframe modernizado da Blue Age - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Implemente a autenticação baseada no Microsoft Entra ID em um aplicativo de AWS mainframe modernizado da Blue Age

Vishal Jaswani e Rimpy Tewani, Amazon Web Services

Resumo

nota

AWS Mainframe Modernization O serviço (experiência do Managed Runtime Environment) não está mais aberto a novos clientes. Para recursos semelhantes ao AWS Mainframe Modernization Serviço (experiência do Managed Runtime Environment), explore o AWS Mainframe Modernization Service (Experiência autogerenciada). Os clientes atuais podem continuar usando o serviço normalmente. Para obter mais informações, consulte Mudança de disponibilidade do AWS Mainframe Modernization.

Os aplicativos de mainframe que são modernizados usando padrões de refatoração, como os do AWS Mainframe Modernization Refactor com AWS Blu Age, exigem uma integração cuidadosa dos mecanismos de autenticação na nova arquitetura do aplicativo. Essa integração geralmente é tratada como uma atividade de pós-modernização. A tarefa pode ser complexa e geralmente envolve a migração ou a externalização dos sistemas de autenticação existentes para se alinharem aos padrões de segurança modernos e às práticas nativas da nuvem. Os desenvolvedores precisam considerar como implementar a autenticação de forma eficaz enquanto trabalham dentro das restrições do ambiente de runtime e das bibliotecas da aplicação modernizada. Após a modernização, AWS fornece maneiras de facilitar a integração do código moderno do AWS Blu Age com sistemas de gerenciamento de identidade e acesso, como o Amazon Cognito e o Microsoft Entra ID (anteriormente conhecido como Azure AD).

Este padrão explica como implementar um mecanismo de autenticação em sua aplicação modernizada quando o provedor de autenticação for o Microsoft Entra ID, sem gastar tempo em pesquisas e testes. O padrão fornece:

  • Bibliotecas do Angular relevantes e testadas em campo da Microsoft Authentication Library (MSAL) e outras documentações do Microsoft Entra ID que são essenciais para a implementação da autenticação. 

  • Configurações necessárias no AWS Blu Age Runtime para habilitar o Spring Security usando OAuth 2.0.

  • Uma biblioteca que captura as identidades dos usuários autenticados e as passa para o Blu Age Runtime. AWS

  • Medidas de segurança que recomendamos implementar.

  • Dicas de solução de problemas comuns com a configuração do Microsoft Entra ID.

nota

Esse padrão usa a biblioteca de OAuth extensões AWS Blu Age, que é fornecida aos clientes como parte de seu contrato de serviços AWS profissionais. Essa biblioteca não faz parte do AWS Blu Age Runtime.

Pré-requisitos e limitações

Pré-requisitos

  • Um aplicativo modernizado que foi produzido pelas ferramentas de refatoração de modernização de mainframe da AWS Blu Age. Esse padrão é usado CardDemocomo exemplo de aplicativo de mainframe de código aberto.

  • A biblioteca de OAuth extensões AWS Blu Age, que é fornecida pela equipe da AWS Blu Age durante sua interação com os AWS Serviços Profissionais.

  • Um ativo Conta da AWS para implantar e testar o aplicativo modernizado.

  • Familiaridade com os arquivos de configuração do AWS Blu Age e os fundamentos do Microsoft Entra ID.

Limitações

  • Esse padrão abrange a autenticação OAuth 2.0 e os fluxos básicos de autorização baseados em tokens. Cenários avançados de autorização e mecanismos minuciosos de controle de acesso não estão no escopo.

  • Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte Serviços da AWS by Region. Para endpoints específicos, consulte Service endpoints and quotas e clique no link correspondente ao serviço desejado.

Versões do produto

Este padrão foi desenvolvido usando:

  • AWS Blu Age Runtime versão 4.1.0 (o padrão também funciona com versões posteriores que são compatíveis com versões anteriores)

  • Biblioteca MSAL versão 3.0.23

  • Java Development Kit (JDK) versão 17

  • Angular versão 16.1

Arquitetura

Pilha de tecnologia de origem

Em ambientes típicos de mainframe, a autenticação é implementada por meio de perfis de usuário. Esses perfis identificam os usuários do sistema, definem quem pode fazer login e especificam quais funções os usuários podem executar nos recursos do sistema. Os perfis de usuário são gerenciados por agentes de segurança ou administradores de segurança.

Pilha de tecnologias de destino

  • Microsoft Entra ID

  • Backend modernizado baseado em Java Spring Boot

  • AWS Tempo de execução do Blu Age

  • Spring Security com OAuth 2.0

  • Aplicação de página única (SPA) do Angular

Arquitetura de destino

AWS O tempo de execução do Blu Age oferece suporte OAuth à autenticação baseada em 2.0 por padrão, então o padrão usa esse padrão para proteger o back-end. APIs

O diagrama a seguir ilustra o fluxo do processo.

nota

O diagrama inclui o Amazon Aurora como exemplo de modernização do banco de dados, embora o Aurora não esteja incluído nas etapas deste padrão.

Fluxo do processo de autenticação baseada no Entra ID para uma aplicação do AWS Blu Age.

em que:

  1. Um usuário tenta se autenticar com o Microsoft Entra ID.

  2. O Microsoft Entra ID retorna tokens de atualização, acesso e ID que a aplicação usa em chamadas subsequentes.

  3. O interceptor MSAL inclui o token de acesso no Authorization cabeçalho de uma solicitação HTTPS para chamar o AWS Blu Age Runtime.

  4. A extension-oauth biblioteca AWS Blu Age extrai as informações do usuário do cabeçalho usando um arquivo de configuração do AWS Blu Age Runtime (application-main.yml) e coloca essas informações em um SharedContext objeto para que a lógica de negócios possa consumi-las.

    nota

    SharedContexté um componente de tempo de execução fornecido pela AWS Blu Age que gerencia o contexto do aplicativo e as informações de estado em todo o aplicativo modernizado. Para obter mais informações sobre os componentes e atualizações do AWS Blu Age Runtime, consulte as notas de lançamento do AWS Blu Age na AWS Mainframe Modernization documentação. Para obter mais informações sobre o application-main.yml arquivo, consulte Configurar a configuração do AWS Blu Age Runtime na AWS Mainframe Modernization documentação.

  5. O AWS Blu Age Runtime verifica se o token está presente. 

    1. Se o token estiver presente, ele verifica a validade do token comunicando-se com o Microsoft Entra ID. 

    2. Se o token não estiver presente, o AWS Blu Age Runtime retornará um erro com o código de status HTTP 403.

  6. Se o token for válido, o AWS Blue Age Runtime permite que a lógica de negócios continue. Se o token for inválido, o AWS Blu Age Runtime retornará um erro com o código de status HTTP 403.

OAuth Fluxo de trabalho 2.0

Para obter um diagrama de alto nível do fluxo de trabalho OAuth 2.0, consulte a documentação do Microsoft Entra.

Ferramentas

Serviços da AWS

AWS Mainframe Modernizationfornece ferramentas e recursos para ajudá-lo a planejar e implementar a migração e a modernização de mainframes para ambientes de tempo de execução AWS gerenciados. Você pode usar os recursos de refatoração desse serviço, fornecidos pela AWS Blu Age, para converter e modernizar seus aplicativos de mainframe antigos.

nota

AWS Mainframe Modernization O serviço (experiência do Managed Runtime Environment) não está mais aberto a novos clientes. Para recursos semelhantes ao AWS Mainframe Modernization Serviço (experiência do Managed Runtime Environment), explore o AWS Mainframe Modernization Service (Experiência autogerenciada). Os clientes atuais podem continuar usando o serviço normalmente. Para obter mais informações, consulte Mudança de disponibilidade do AWS Mainframe Modernization.

Repositório de código

O CardDemo aplicativo foi atualizado para demonstrar a integração com o Microsoft Entra ID. Você pode acessar o código do GitHub repositório para esse padrão.

Configuração de backend

Esse padrão requer alterações no arquivo de application-main.yml configuração para habilitar o Spring Security usando OAuth 2.0 no aplicativo de back-end.  Este é um exemplo de arquivo .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 Biblioteca de filtros de OAuth extensão Blu Age

A biblioteca de OAuth extensões do AWS Blu Age é fornecida pela equipe do AWS Blu Age durante seu envolvimento com os AWS Serviços Profissionais.

Essa biblioteca lê a configuração claim.claims no arquivo application-main.yml mostrado no bloco de código anterior. Essa configuração é uma lista. Cada item na lista fornece dois valores: claimName e claimMapValue. claimName representa um nome de chave em um JSON Web Token (JWT) enviado pelo frontend e claimMapValue é o nome da chave em SharedContext. Por exemplo, se você quiser capturar o ID do usuário no backend, defina claimName com o nome da chave no JWT que contém o userId que é fornecido pelo Microsoft Entra ID, e defina claimMapValue com o nome da chave para buscar o ID do usuário no código do backend.

Por exemplo, se você configurar UserId em claimMapValue, poderá usar o seguinte código para extrair o ID do usuário:

SharedContext.get().getValue("userId", [UserId]);

Práticas recomendadas

Na implementação deste padrão, leve em consideração as seguintes considerações de segurança importantes.

Importante

Este padrão fornece uma base para a integração da autenticação. Recomendamos que você implemente medidas de segurança além das discutidas nesta seção com base nos requisitos de sua empresa antes de implantá-las na produção.

  • AWS segurança de configuração.Mova valores de configuração confidenciais de application-main.yml para AWS Secrets Manager. Por exemplo, configure as seguintes propriedades usando o Secrets Manager:

    security: oauth2: client: registration: azure: client-id: {clientId} client-secret: ${clientSecret}

    Para obter mais informações sobre como você pode usar o Secrets Manager para configurar os parâmetros do AWS Blu Age, consulte segredos do AWS Blu Age Runtime na AWS Mainframe Modernization documentação.

  • Proteção do ambiente de runtime. Configure o ambiente de aplicativos modernizado com controles AWS de segurança adequados:

    server: tomcat: remoteip: protocol-header: X-Forwarded-Proto remote-ip-header: X-Forwarded-For forward-headers-strategy: NATIVE
  • CloudWatch Registro na Amazon. Considere adicionar o arquivo 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>

    Para obter informações sobre como ativar o rastreamento com CloudWatch, consulte Habilitar rastreamento para registrar a correlação na CloudWatch documentação.

  • Configuração e tratamento de tokens. Configure a vida útil dos tokens no Microsoft Entra ID para se alinhar aos seus requisitos de segurança. Configure os tokens de acesso para expirar em uma hora e os tokens de atualização para expirar em 24 horas. Na configuração do AWS Blu Age Runtime (application-main.yml), certifique-se de que a validação do JWT esteja configurada corretamente com o URI exato do emissor e os valores de público do registro do aplicativo Entra ID.

    Quando um token expira e é atualizado:

    1. O interceptor de erros da aplicação Angular trata a resposta 401 obtendo um novo token por meio do MSAL.

    2. O novo token é enviado com a solicitação subsequente.

    3. O OAuth filtro do AWS Blu Age Runtime valida o novo token e é atualizado automaticamente SharedContext com as informações atuais do usuário. Isso garante que a lógica de negócios continue a ter acesso ao contexto de usuário válido por meio de chamadas SharedContext.get().getValue().

    Para obter mais informações sobre os componentes do AWS Blu Age Runtime e suas atualizações, consulte as notas de lançamento do AWS Blu Age.

  • Segurança do AWS Blu Age Runtime. A oauth2-ext biblioteca fornecida pelo AWS Blu Age deve ser colocada no local correto do diretório compartilhado ({app-server-home}/shared/) com as permissões de arquivo adequadas. Verifique se a biblioteca extrai com êxito as informações do usuário JWTs verificando a população de SharedContext objetos em seus registros.

  • Configuração específica de declarações. Em application-main.yml, defina explicitamente as declarações que você precisa do Microsoft Entra ID. Por exemplo, para capturar o e-mail e os perfis dos usuários, especifique:

    gapwalk-application: security: claim: claims: - claimName: upn claimMapValue: username - claimName: roles claimMapValue: userRoles - claimName: email claimMapValue: userEmail
  • Tratamento de erros. Adicione tratamento de erros para solucionar falhas de autenticação em sua aplicação Angular; por exemplo:

    @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); }) ); } }
  • Configuração do tempo limite de sessões. Defina as configurações de tempo limite da sessão no AWS Blu Age Runtime e no Microsoft Entra ID. Por exemplo, adicione o seguinte código ao arquivo application-main.yml:

    server: servlet: session: timeout: 3600 # 1 hour in seconds
  • MsalGuard. Você deve implementar o MsalGuard recurso em todas as rotas protegidas para impedir o acesso não autorizado. Por exemplo:

    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 } ];

    As rotas que não têm MsalGuard proteção estarão acessíveis sem autenticação, potencialmente expondo funcionalidades confidenciais. Certifique-se de que todas as rotas que exigem autenticação incluam os protetores em suas configurações.

Épicos

TarefaDescriptionHabilidades necessárias

Configure uma conta do Microsoft Azure para criar um Entra ID.

Para obter opções e instruções, consulte o site do Microsoft Azure.

Desenvolvedor de aplicativos

Configure um Microsoft Entra ID em sua aplicação.

Para saber como adicionar a autenticação Microsoft Entra ID B2C (Azure AD B2C) ao seu SPA Angular, consulte a documentação da Microsoft. Especificamente:

  1. Registre sua aplicação e identificadores de registro.

  2. Exponha o endpoint da transação AWS Blu Age adicionando e expondo um escopo personalizado.  

  3. Depois de definir o escopo e o URL da API, configure esses valores nas propriedades apiUri e apiScope do arquivo environment.ts no repositório de código.

Desenvolvedor de aplicativos
TarefaDescriptionHabilidades necessárias

Clone o GitHub repositório para obter o código Angular necessário para autenticação.

Execute o comando a seguir para clonar o GitHub repositório fornecido com esse padrão em seu diretório de trabalho atual local:

git clone https://github.com/aws-samples/sample-microsoft-entra-id-based-auth-in-aws-bluage-modernized-mainframe-app.git
Desenvolvedor de aplicativos

Implante o código modernizado do AWS Blu Age em um servidor Tomcat para implementar a autenticação.

Para configurar o ambiente local que inclui o Tomcat e o servidor de desenvolvimento Angular, siga as etapas de instalação fornecidas pela equipe da AWS Blu Age como parte do engajamento do cliente com os AWS Serviços Profissionais.

Desenvolvedor de aplicativos
TarefaDescriptionHabilidades necessárias

Habilite a segurança do AWS Blu Age Runtime para proteger os endpoints da API REST do AWS Blu Age.

Configure o application-main.yml arquivo que o AWS Blu Age Runtime usa da seguinte maneira. Para ver um exemplo desse arquivo, consulte a seção Repositório de código anterior neste padrão.

  • spring:security:oauth2:client:*ativa o suporte ao cliente do Spring Security OAuth 2.0. Substitua as configurações por valores específicos da configuração do Microsoft Entra ID.

  • spring:security:oauth2:resourceserverativa o suporte ao servidor de recursos do Spring Security OAuth 2.0.

  • gapwalk-application.security.issuerUri especifica o URL do provedor de identidade para buscar informações de configuração, como o endpoint de autorização, o endpoint do token e assim por diante.

  • gapwalk-application.security.identity deve ser definido como oauth.

  • gapwalk-application.security.claim.claimsespecifica a lista de declarações necessárias para capturar nomes de usuários IDs e usuários.  Para ver um exemplo, consulte a seção Repositório de códigos anterior neste padrão.

  • gapwalk-application.security deve ser definido como enabled.

  • spring.autoconfigure.exclude deve ser removido para permitir a autenticação.

Desenvolvedor de aplicativos

Incorpore o código de exemplo do seu ambiente local à sua base de código Angular modernizada do Blu Age.

Para obter informações sobre como incorporar o exemplo em sua base de código Angular modernizada do AWS Blu Age, consulte a seção Repositório de código anteriormente neste padrão.

Desenvolvedor de aplicativos

Coloque a biblioteca oauth2-ext no diretório compartilhado.

Coloque a biblioteca oauth2-ext no diretório compartilhado do servidor de aplicações para que sua aplicação modernizada do AWS Blu Age possa usá-la. Execute os seguintes comandos :

cd oauth2-ext/target cp extension-oauth-filter-<version>.jar /{app-server-home}/shared/
Desenvolvedor de aplicativos
TarefaDescriptionHabilidades necessárias

Implante a aplicação de frontend.

Execute os seguintes comandos para iniciar a aplicação de frontend localmente:

npm install ng serve --ssl npm start
nota

Adicionar o sinalizador --ssl ao comando ng serve garante que o servidor de desenvolvimento use HTTPS, que é mais seguro do que outros protocolos e fornece uma simulação melhor de um ambiente de produção.

Desenvolvedor de aplicativos

Inicie a aplicação de backend.

Inicie o servidor Tomcat no Eclipse.

Desenvolvedor de aplicativos
TarefaDescriptionHabilidades necessárias

Teste a funcionalidade de login.

Acesse a aplicação implantada localmente em http://localhost:4200 para verificar se os usuários devem confirmar sua identidade.

nota

O HTTP é usado aqui para fins de demonstração. Em um ambiente de produção ou outro ambiente acessível ao público, você deve usar HTTPS para fins de segurança. Mesmo para desenvolvimento local, sugerimos que você configure o HTTPS sempre que possível.

O prompt de login da Microsoft deve aparecer e os usuários configurados no Microsoft Entra ID devem ter permissão para acessar a aplicação.

Desenvolvedor de aplicativos

Teste o cabeçalho de autorização na solicitação.

nota

As etapas a seguir usam o CardDemoaplicativo como exemplo. As etapas de teste para outras aplicações modernas podem variar.

  1. Inicie a transação CC00 no CardDemo aplicativo.

  2. Faça login com as credenciais de usuário. Por exemplo, se você estiver usando o workshop individualizado de nível 3 do AWS Blu Age, poderá usar o nome USER0001 e a senha PASSWORD como credenciais.

  3. Abra a janela Ferramentas do desenvolvedor na mesma guia do seu navegador.

  4. Abra a guia Rede e verifique a solicitação enviada ao backend http://localhost:8080/gapwalk-application/transaction.

  5. Confira o cabeçalho da solicitação e verifique se você vê um cabeçalho de autorização com o valor Bearer <token>, onde <token> é um valor gerado pelo Microsoft Entra ID.

Desenvolvedor de aplicativos

Teste a funcionalidade de logout.

Escolha Sair para fazer logout e tente acessar a aplicação novamente. Isso deve apresentar um novo prompt de login.

Desenvolvedor de aplicativos

Solução de problemas

ProblemaSolução

O token emitido pelo Microsoft Entra ID não é compatível com a segurança do Spring Boot OAuth 2.0.

Para obter uma solução para o problema, consulte Microsoft Entra ID OAuth Flow no OAuth blog.

Perguntas gerais relacionadas a tokens.

Para decodificar e visualizar o conteúdo de um token JWT, use o site https://jwt.io/.

Recursos relacionados