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, da Amazon Web Services

Resumo

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 execução e das bibliotecas do aplicativo modernizado. 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).

Esse padrão explica como implementar um mecanismo de autenticação em seu aplicativo modernizado quando o provedor de autenticação é o Microsoft Entra ID, sem gastar tempo em pesquisas e testes. O padrão fornece:

  • Bibliotecas angulares relevantes e testadas em campo da Microsoft Authentication Library (MSAL) e de 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 de controle de acesso refinados não estão no escopo.

  • Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para ver a disponibilidade da região, consulte Serviços da AWS por região. Para endpoints específicos, consulte Endpoints e cotas de serviço e escolha o link para o serviço.

Versões do produto

Esse 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

  • Versão angular 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 entrar 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

  • Back-end modernizado baseado em Java Spring Boot

  • AWS Tempo de execução do Blu Age

  • Spring Security com OAuth 2.0

  • Aplicativo angular de página única (SPA)

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 desse padrão.

Fluxo de processo para autenticação baseada em Entra ID para um aplicativo 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 o aplicativo 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.

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 back-end

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.  O .yml arquivo tem a seguinte aparência:

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

Por exemplo, se você configurar UserIdclaimMapValue, poderá usar o código a seguir para extrair o ID do usuário:

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

Práticas recomendadas

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

Importante

Esse 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 execução. 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 arquivologback-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 manuseio de tokens. Configure a vida útil do token no Microsoft Entra ID para se alinhar aos seus requisitos de segurança. Configure os tokens de acesso para expirar em 1 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 do aplicativo Angular manipula 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 SharedContext.get().getValue() chamadas.

    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 reivindicações. Emapplication-main.yml, defina explicitamente as declarações que você precisa do Microsoft Entra ID. Por exemplo, para capturar o e-mail e as funções do usuário, 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 seu aplicativo 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 da sessão. Defina as configurações de tempo limite da sessão no AWS Blu Age Runtime e no Microsoft Entra ID. Por exemplo, adicione o código a seguir ao seu application-main.yml arquivo:

    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

TarefaDescriçãoHabilidades necessárias

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

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

Desenvolvedor de aplicativos

Configure um Microsoft Entra ID em seu aplicativo.

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 seu aplicativo e registre os identificadores.

  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 apiScope propriedades apiUri e do environment.ts arquivo no repositório de código.

Desenvolvedor de aplicativos
TarefaDescriçãoHabilidades 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
TarefaDescriçãoHabilidades necessárias

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

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.issuerUriespecifica a 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.identitydeve ser definido comooauth.

  • 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ódigo anterior nesse padrão.

  • gapwalk-application.securitydeve ser definido comoenabled.

  • spring.autoconfigure.excludedeve 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 oauth2-ext biblioteca no diretório compartilhado.

Coloque a oauth2-ext biblioteca no diretório compartilhado do servidor de aplicativos para que seu aplicativo modernizado 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
TarefaDescriçãoHabilidades necessárias

Implante o aplicativo de front-end.

Execute os seguintes comandos para iniciar o aplicativo front-end localmente:

npm install ng serve --ssl npm start
nota

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

Desenvolvedor de aplicativos

Inicie o aplicativo de back-end.

Inicie o servidor Tomcat no Eclipse.

Desenvolvedor de aplicativos
TarefaDescriçãoHabilidades necessárias

Teste a funcionalidade de login.

Acesse o aplicativo implantado 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 o desenvolvimento local, recomendamos que você configure 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 o aplicativo.

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 outros aplicativos modernos podem variar.

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

  2. Faça login com as credenciais do 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 back-endhttp://localhost:8080/gapwalk-application/transaction.

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

Desenvolvedor de aplicativos

Teste a funcionalidade de logout.

Escolha Sair para sair e tente acessar o aplicativo novamente. Ele 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