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
- Uma subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
- Uma identidade do Azure com, pelo menos, a função Cloud Application Administrator Microsoft Entra. Para obter mais informações, consulte Listar atribuições de função do Microsoft Entra e funções internas do Microsoft Entra.
- Um locatário do Microsoft Entra. Se não tiver um inquilino existente, consulte Guia de início rápido: configurar um inquilino.
- Uma máquina local com um sistema operacional Unix-like instalado - por exemplo, Ubuntu, macOS ou Windows Subsystem para Linux.
- Git.
- Uma implementação Java SE, versão 21 ou posterior - por exemplo, a compilação Microsoft do OpenJDK.
- Maven, versão 3.9.3 ou posterior.
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:
- Quando chegar à guia Noções básicas na seção Criar um novo usuário , use as seguintes etapas:
Em Nome principal do usuário, digite admin. Salve o valor para poder usá-lo mais tarde quando entrar no aplicativo.
Em Apelido do email, selecione Derivar do nome principal do usuário
Em Nome para exibição, digite Admin.
Em Senha, selecione Gerar senha automaticamente. Copie e guarde o valor Palavra-passe para utilizar mais tarde quando iniciar sessão na aplicação.
Selecione Conta ativada.
Selecione Rever + criar>Criar. Aguarde até que o usuário seja criado.
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.
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.
- Quando chegar à seção Registrar um aplicativo , use as seguintes etapas:
- Em Tipos de conta suportados, selecione Contas somente neste diretório organizacional (Somente diretório padrão - Locatário único).
- 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.
- 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.
- Quando chegar à seção Adicionar credenciais, selecione a guia Adicionar um segredo do cliente.
- 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.
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.
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?.
Selecione Aplicar. Aguarde até que a função seja criada.
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.
Quando chegar à seção Atribuir usuários e grupos a funções do Microsoft Entra, use as seguintes etapas:
Selecione Adicionar usuário/grupo.
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 .
Repita as etapas anteriores para atribuir a função Usuário ao usuário Usuário.
Selecione Atualizar e você verá os usuários e funções atribuídos no painel Usuários e grupos .
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:
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.
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.
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:
- Entre no centro de administração do Microsoft Entra como pelo menos um administrador de aplicativos na nuvem.
- 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 .
- Navegue até Identidade de usuários > Todos os usuários>.
- Localize o usuário administrador na lista e selecione-o.
- Localize o campo Nome principal do usuário.
- 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.
- 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:
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.
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.
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.
Se lhe for pedido Permissões solicitadas, reveja as permissões solicitadas pela aplicação. Selecione Aceitar para continuar o teste.
Selecione Sair para sair do aplicativo. Depois de sair, você será redirecionado para a página de boas-vindas.
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
admin
diferente.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.
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.
- 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.
- 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.
- 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:
- Implementar um aplicativo Java com Open Liberty ou WebSphere Liberty em Aplicativos de Contêiner do Azure
- Implemente o WebSphere Liberty e o Open Liberty no Red Hat OpenShift do Azure
- Implementar um aplicativo Java com Open Liberty ou WebSphere Liberty em um cluster do Serviço Kubernetes do Azure (AKS)
- Autenticação do OpenID Connect com o Microsoft Entra ID
- Plataforma de identidades da Microsoft e fluxo de código de autorização OAuth 2.0
- Autenticar utilizadores através de fornecedores de redes sociais
- Login de Redes Sociais 1.0
- Cliente OpenID Connect 1.0
- O que é OpenID Connect
- Configuração da Política de Segurança Programática
- Como proteger um serviço Web RESTful usando Jacarta EE
- Linguagem de expressão de Jacarta