Partilhar via


Proteja aplicativos WebSphere Liberty/Open Liberty com o Microsoft Entra ID usando o OpenID Connect

Este artigo mostra como proteger aplicativos IBM WebSphere Liberty/Open Liberty com o Microsoft Entra ID usando OpenID Connect (OIDC).

Neste artigo, vai aprender a:

  • Configure um provedor OIDC com o Microsoft Entra ID.
  • Proteja um aplicativo WebSphere Liberty/Open Liberty usando OIDC.
  • Execute e teste o aplicativo WebSphere Liberty/Open Liberty.

Pré-requisitos

Configurar um provedor OIDC com o Microsoft Entra ID

O OpenID Connect é um protocolo de autenticação padrão da indústria bem suportado pelo Microsoft Entra ID. Nesta seção, você configura um provedor OIDC com o ID do Microsoft Entra para uso com seu aplicativo WebSphere Liberty/Open Liberty. Em uma seção posterior, você configura o aplicativo WebSphere Liberty/Open Liberty usando OIDC para autenticar e autorizar usuários em seu locatário do Microsoft Entra.

Criar usuários no locatário do Microsoft Entra

Primeiro, crie dois usuários em seu locatário do Microsoft Entra seguindo as etapas em Como criar, convidar e excluir usuários. Você só precisa da seção Criar um novo usuário . Use as instruções a seguir ao longo do artigo e, em seguida, retorne a este artigo depois de criar usuários em seu locatário do Microsoft Entra.

Para criar um usuário para servir como "administrador" no aplicativo, use as seguintes etapas:

  1. Quando chegar à guia Noções básicas na seção Criar um novo usuário , use as seguintes etapas:
    1. Em Nome principal do usuário, digite admin. Salve o valor para poder usá-lo mais tarde quando entrar no aplicativo.

    2. Em Apelido do email, selecione Derivar do nome principal do usuário

    3. Em Nome para exibição, digite Admin.

    4. Em Senha, selecione Gerar senha automaticamente. Copie e guarde o valor Palavra-passe para utilizar mais tarde quando iniciar sessão na aplicação.

    5. Selecione Conta ativada.

      Captura de ecrã do portal do Azure que mostra o painel Criar novo utilizador Noções básicas para um utilizador administrador.

    6. Selecione Rever + criar>Criar. Aguarde até que o usuário seja criado.

    7. Aguarde cerca de um minuto e selecione Atualizar. Você deve ver o novo usuário na lista.

Para criar um usuário para servir como um "usuário" no aplicativo, repita estas etapas, mas use os seguintes valores:

  • Em Nome principal do usuário, digite usuário.
  • Em Nome para exibição, digite Usuário.

Captura de ecrã do portal do Azure que mostra o painel Criar novo utilizador Noções básicas para um utilizador normal.

Registar uma aplicação no Microsoft Entra ID

Em seguida, registre um aplicativo seguindo as etapas em Guia de início rápido: registrar um aplicativo com a plataforma de identidade da Microsoft. Use as instruções a seguir ao longo do artigo e, em seguida, retorne a este artigo depois de registrar e configurar o aplicativo.

  1. Quando chegar à seção Registrar um aplicativo , use as seguintes etapas:
    1. Em Tipos de conta suportados, selecione Contas somente neste diretório organizacional (Somente diretório padrão - Locatário único).
    2. Quando o registro terminar, salve os valores de ID do aplicativo (cliente) e ID do diretório (locatário) para usar posteriormente na configuração do aplicativo.
  2. Quando chegar à seção Adicionar um URI de redirecionamento, ignore as etapas como por enquanto. Você adiciona o URI de redirecionamento mais tarde quando executa e testa o aplicativo de exemplo localmente neste artigo.
  3. Quando chegar à seção Adicionar credenciais, selecione a guia Adicionar um segredo do cliente.
  4. Ao adicionar um segredo do cliente, anote o valor Segredo do cliente para usar posteriormente na configuração do aplicativo.

Adicionar funções de aplicativo ao seu aplicativo

Em seguida, adicione funções de aplicativo ao seu aplicativo seguindo as etapas em Adicionar funções de aplicativo ao seu aplicativo e receba-as no token. Você só precisa das seções Declarar funções para um aplicativo e Atribuir usuários e grupos a funções do Microsoft Entra. Use as instruções a seguir ao longo do artigo e, em seguida, retorne a este artigo depois de declarar funções para o aplicativo.

  1. Quando chegar à seção Declarar funções para um aplicativo, use a interface do usuário Funções do aplicativo para criar funções para o administrador e o usuário regular.

    1. Crie uma função de usuário administrador usando os seguintes valores:

      • Em Nome para exibição, digite Admin.
      • Em Tipos de membros permitidos, selecione Usuários/Grupos.
      • Em Valor, insira admin.
      • Em Descrição, digite Admin.
      • Selecione Deseja habilitar esta função de aplicativo?.

      Captura de ecrã do portal do Azure que mostra o painel Criar função de aplicação para o utilizador administrador.

    2. Selecione Aplicar. Aguarde até que a função seja criada.

    3. Crie uma função de usuário regular usando as mesmas etapas, mas com os seguintes valores:

      • Em Nome para exibição, digite Usuário.
      • Em Valor, insira usuário.
      • Em Descrição, digite Usuário.

      Captura de ecrã do portal do Azure que mostra o painel Criar função de aplicação para o utilizador normal.

  2. Quando chegar à seção Atribuir usuários e grupos a funções do Microsoft Entra, use as seguintes etapas:

    1. Selecione Adicionar usuário/grupo.

    2. No painel Adicionar Atribuição, para Usuários, selecione Usuário Administrador e, para Selecionar uma função, selecione Administrador da função. Em seguida, selecione Atribuir. Aguarde até que a atribuição do aplicativo seja bem-sucedida. Talvez seja necessário rolar a tabela para os lados para ver a coluna Função atribuída .

    3. Repita as etapas anteriores para atribuir a função Usuário ao usuário Usuário.

    4. Selecione Atualizar e você verá os usuários e funções atribuídos no painel Usuários e grupos .

      Captura de ecrã do portal do Azure que mostra os utilizadores e funções atribuídos.

      Talvez seja necessário ajustar a largura dos cabeçalhos das colunas para que sua exibição se pareça com a imagem.

Não siga nenhuma outra etapa em Adicionar funções de aplicativo ao seu aplicativo e receba-as no token.

Proteja um aplicativo WebSphere Liberty/Open Liberty usando o OpenID Connect

Nesta seção, você protege um aplicativo WebSphere Liberty/Open Liberty que autentica e autoriza usuários em seu locatário do Microsoft Entra usando OIDC. Você também aprende a dar aos usuários acesso a determinadas partes do aplicativo usando o controle de acesso baseado em função (RBAC). O aplicativo usa a Configuração de Política de Segurança Programática da especificação Jakarta Servlet. Jacarta EE também suporta serviços web RESTful. Consulte a seção Próximas etapas para obter uma referência a um artigo sobre como proteger um aplicativo de serviços Web RESTful.

A amostra do aplicativo WebSphere Liberty/Open Liberty para este início rápido está no GitHub no repositório liberty-entra-id .

Habilitar autenticação e autorização para proteger o aplicativo

O aplicativo tem um recurso de página de boas-vindas definido em index.html, que é mostrado no código de exemplo a seguir. Esta página é acessível a utilizadores não autenticados. O caminho raiz da página de boas-vindas está em /.

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Greeting</title>
</head>
<body>
<h1>Hello, welcome to Open Liberty/WebSphere Liberty and Microsoft Entra ID integration!</h1>
<h1>
    <a href="/profile/user">Sign in as user</a>
</h1>
<h1>
    <a href="/profile/admin">Sign in as admin</a>
</h1>
</body>
</html>

Na página de boas-vindas, os usuários podem entrar no aplicativo para acessar a página de perfil. A página de boas-vindas tem links para entrar como usuário ou como administrador. Os links estão em /profile/user e /profile/admin, respectivamente.

Ambos os /profile/user links e /profile/admin links apontam para o servlet de perfil, definido em ProfileServlet.java, conforme mostrado no código de exemplo a seguir. Este servlet é acessível apenas a usuários autenticados usando a anotação jakarta.servlet.annotation.ServletSecurity e a anotação jakarta.servlet.annotation.HttpConstraint. O atributo rolesAllowed = {"users"} especifica que somente usuários autenticados com função users de segurança podem acessar o /profile caminho. O usuário autenticado recebe automaticamente a users função no arquivo de configuração do Liberty server.xml.

package com.example;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.HttpConstraint;
import jakarta.servlet.annotation.ServletSecurity;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

import com.ibm.websphere.security.social.UserProfileManager;
import java.util.List;

@WebServlet(name = "ProfileServlet", urlPatterns = {"/profile/user","/profile/admin"})
@ServletSecurity(value = @HttpConstraint(rolesAllowed = {"users"},
        transportGuarantee = ServletSecurity.TransportGuarantee.CONFIDENTIAL))
public class ProfileServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

        List<?> roles = UserProfileManager.getUserProfile().getIdToken().getClaims().getClaim("roles",
                List.class);

        String path = request.getServletPath();
        if (path.equals("/profile/admin") && (null == roles || !roles.contains("admin"))) {
            response.sendError(HttpServletResponse.SC_FORBIDDEN);
            return;
        }

        String username = request.getUserPrincipal().getName();
        request.setAttribute("name", username);
        request.setAttribute("roles", roles);

        request
                .getRequestDispatcher("/profile.jsp")
                .forward(request, response);
    }
}

O servlet de perfil recupera as funções do usuário do token de ID e verifica se o usuário tem a admin função quando o usuário tenta acessar o /profile/admin caminho. Se o usuário não tiver a admin função, o servlet retornará um erro 403 Proibido. Em outros casos, o servlet recupera o nome do usuário e encaminha a solicitação para a página de perfil com o nome e as funções do usuário.

A página de perfil é definida em profile.jsp, conforme mostrado no exemplo a seguir. Esta página exibe o nome e as funções do usuário. A página de perfil também tem um link de saída em /logout. A página de perfil é escrita JSP (Jakarta Server Pages). Observe o uso de ${} expressões na página. ${} Indica o uso da Linguagem de Expressão de Jacarta (EL). As expressões EL são substituídas pelos valores das variáveis correspondentes quando a página é renderizada. Consulte a seção Próximas etapas para obter uma referência à especificação EL.

<%@ taglib prefix="c" uri="jakarta.tags.core" %>
<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
    <meta charset="UTF-8">
    <title>Profile</title>
</head>
<body>
<h1>Hello, ${name}</h1>
<h2>Roles</h2>
<ul>
    <c:forEach var="role" items="${roles}">
        <li>${role}</li>
    </c:forEach>
</ul>
<h1>
    <b><a href="/logout">Sign out</a></b>
</h1>
</body>
</html>

Quando o usuário seleciona o link para sair, o aplicativo chama o servlet de saída, definido em LogoutServlet.java, conforme mostrado no código de exemplo a seguir. O servlet de saída chama o request.logout() método para sair do usuário e, em seguida, redireciona o usuário para a página de boas-vindas.

package com.example;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.HttpConstraint;
import jakarta.servlet.annotation.ServletSecurity;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "LogoutServlet", urlPatterns = "/logout")
@ServletSecurity(value = @HttpConstraint(rolesAllowed = {"users"},
        transportGuarantee = ServletSecurity.TransportGuarantee.CONFIDENTIAL))
public class LogoutServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

        request.logout();
        response.sendRedirect("/");
    }
}

Execute e teste o aplicativo WebSphere Liberty/Open Liberty

Nesta seção, você executa e testa o aplicativo WebSphere Liberty/Open Liberty para ver como ele funciona com o Microsoft Entra ID como o provedor OIDC.

Adicionar um URI de redirecionamento ao registro do aplicativo

Para executar e testar o aplicativo localmente com êxito, você precisa adicionar um URI de redirecionamento ao registro do aplicativo. Siga as instruções na seção Adicionar um URI de redirecionamento do Guia de início rápido: registre um aplicativo com a plataforma de identidade da Microsoft e use os seguintes valores:

  • Em Configurar plataformas, selecione Web.
  • Para Redirecionar URIs, digite https://localhost:9443/ibm/api/social-login/redirect/liberty-entra-id.

Preparar a amostra

Use as seguintes etapas para preparar o aplicativo de exemplo:

  1. Use os seguintes comandos para clonar o aplicativo de exemplo do GitHub:

    git clone https://github.com/Azure-Samples/liberty-entra-id
    cd liberty-entra-id
    git checkout 2024-09-26
    

    Se você vir uma mensagem sobre estar no estado HEAD desanexado, essa mensagem é segura para ignorar. Esta mensagem significa apenas que você fez check-out de uma tag.

  2. Use os comandos a seguir para definir as seguintes variáveis de ambiente com os valores que você anotou anteriormente:

    export CLIENT_ID==<application/client-ID>
    export CLIENT_SECRET=<client-secret>
    export TENANT_ID=<directory/tenant-ID>
    

    Essas variáveis de ambiente fornecem os valores para o suporte integrado do OIDC no WebSphere Liberty/Open Liberty. A configuração OIDC correspondente no Liberty server.xml é mostrada no exemplo a seguir.

     <oidcLogin
         id="liberty-entra-id" clientId="${client.id}"
         clientSecret="${client.secret}"
         discoveryEndpoint="https://login.microsoftonline.com/${tenant.id}/v2.0/.well-known/openid-configuration"
         signatureAlgorithm="RS256"
         userNameAttribute="preferred_username" />
    

    Se o valor de uma variável não estiver definido no arquivo de configuração, o WebSphere Liberty/Open Liberty lerá o valor das variáveis de ambiente seguindo sua convenção de nomenclatura. Para obter detalhes sobre a conversão de nomenclatura, consulte Precedência de substituição de variáveis.

Execute o aplicativo WebSphere Liberty/Open Liberty

Você pode executar o aplicativo usando liberty-maven-plugin. Para executar o aplicativo, selecione um dos seguintes métodos:

Nota

Para habilitar o WebSphere Liberty/Open Liberty para se conectar ao Microsoft Entra ID, certifique-se de executar o comando no shell no qual você definiu as variáveis de ambiente mostradas na seção anterior.

  • Execute o aplicativo no modo de desenvolvimento:

    mvn liberty:dev
    
  • Execute o aplicativo no modo de tempo de execução:

    mvn liberty:run
    

Se você quiser tentar modos diferentes, use Ctrl+C para parar o aplicativo e, em seguida, execute o aplicativo em outro modo.

Teste o aplicativo WebSphere Liberty/Open Liberty

Depois que o aplicativo estiver em execução, abra um navegador da Web com uma guia privada e navegue até https://localhost:9443. Como o certificado é autoassinado, você pode ver um aviso sobre o certificado. Você pode ignorar o aviso com segurança e prosseguir para o site.

Você deve ver a página de boas-vindas com links para entrar como usuário ou como administrador. Usar uma guia privada evita poluir qualquer atividade existente do Microsoft Entra ID que você possa ter em seu navegador regular.

Captura de tela do aplicativo de exemplo que mostra a página de boas-vindas.

Reúna as credenciais dos dois usuários

Neste artigo, o Microsoft Entra ID usa o endereço de email de cada usuário como o ID de usuário para entrar. Use as seguintes etapas para obter o endereço de e-mail do usuário administrador e do usuário regular:

  1. Entre no centro de administração do Microsoft Entra como pelo menos um administrador de aplicativos na nuvem.
  2. Se você tiver acesso a vários locatários, use o ícone Configurações ( ) no menu superior para alternar para o locatário no qual deseja registrar o aplicativo no menu Diretórios + assinaturas .
  3. Navegue até Identidade de usuários > Todos os usuários>.
  4. Localize o usuário administrador na lista e selecione-o.
  5. Localize o campo Nome principal do usuário.
  6. Use o ícone de cópia ao lado do valor do campo para salvar o endereço de e-mail do usuário na área de transferência. Salve o valor para uso posterior.
  7. Para obter o endereço de e-mail para o usuário regular, siga as mesmas etapas.

Use as senhas para o usuário administrador e usuário regular que você definiu ao criar os usuários.

Exercer a funcionalidade do aplicativo

Use as seguintes etapas para exercer a funcionalidade:

  1. Selecione o link Entrar como usuário . Inicie sessão com o utilizador normal que criou anteriormente. Depois de iniciar sessão, o Microsoft Entra ID redireciona-o para a página de perfil, onde vê o seu nome e funções.

    Captura de tela do aplicativo de exemplo que mostra o perfil do usuário.

  2. Se esta for a primeira vez que inicia sessão, ser-lhe-á pedido que atualize a sua palavra-passe. Siga as instruções para atualizar a sua palavra-passe.

  3. Se você for solicitado com Sua organização requer informações de segurança adicionais. Siga as instruções para baixar e configurar o aplicativo Microsoft Authenticator, você pode selecionar Perguntar mais tarde para continuar o teste.

  4. Se lhe for pedido Permissões solicitadas, reveja as permissões solicitadas pela aplicação. Selecione Aceitar para continuar o teste.

  5. Selecione Sair para sair do aplicativo. Depois de sair, você será redirecionado para a página de boas-vindas.

  6. Selecione o link Entrar como administrador . O Microsoft Entra ID redireciona você para a página de entrada. Inicie sessão com o utilizador administrador que criou anteriormente. Depois de iniciar sessão, o Microsoft Entra ID redireciona-o para a página de perfil semelhante, com uma função admindiferente.

    Captura de tela do aplicativo de exemplo que mostra o perfil de administrador.

  7. Termine sessão novamente e tente iniciar sessão como administrador com o utilizador normal que criou anteriormente. Você verá uma mensagem de erro porque o usuário regular não tem a admin função.

    Captura de tela do aplicativo de exemplo que mostra a mensagem de acesso negado.

Clean up resources (Limpar recursos)

Este artigo não direciona você a implantar seu aplicativo no Azure. Não há recursos do Azure para limpar o aplicativo, embora haja recursos do Microsoft Entra ID. Para implantar um aplicativo no Azure, você pode seguir as orientações mencionadas na próxima seção.

Quando terminar com os recursos para este aplicativo de exemplo, use as etapas a seguir para limpar os recursos do Microsoft Entra ID. A remoção de recursos não utilizados do Microsoft Entra ID é uma prática recomendada de segurança importante.

  1. Remova o registro de aplicativo que você criou seguindo as etapas em Remover um aplicativo registrado na plataforma de identidade da Microsoft. Você só precisa seguir as etapas na seção Remover um aplicativo criado pela sua organização.
  2. O ato de remover o registro do aplicativo também deve excluir o aplicativo empresarial. Para obter mais informações sobre como excluir aplicativos corporativos, consulte Excluir um aplicativo empresarial.
  3. Exclua os usuários criados seguindo as etapas em Como criar, convidar e excluir usuários.

Próximos passos

Neste início rápido, você protege os aplicativos WebSphere Liberty/Open Liberty com o Microsoft Entra ID usando OIDC. Para saber mais, explore os seguintes recursos: