Suporte ao Open ID Connect para AEM as a Cloud Service no nível de publicação open-id-connect-support-for-aem-as-a-cloud-service-on-publish-tier
Introdução introduction
À medida que as organizações modernizam suas experiências digitais, o gerenciamento de identidades seguro e escalável se torna um requisito fundamental. O Adobe Experience Manager (AEM) Cloud Service agora é compatível com o OpenID Connect (OIDC) no nível de publicação, permitindo integração contínua e baseada em padrões com os principais Provedores de identidade (IdPs), como Entra ID (Azure AD), Google, Okta, Auth0, Identidade de ping, ForgeRock e IDC compatíveis com os IDPs.
O OIDC é uma camada de identidade sobre o protocolo OAuth 2.0 que permite uma autenticação de usuário robusta, mantendo a simplicidade para os desenvolvedores. Ele é amplamente adotado para cenários B2C (B2C), intranet e portais de parceiros, em que são necessários logon seguro de usuários e federações de identidade.
Até agora, os clientes do AEM eram responsáveis por implementar sua própria lógica de logon personalizada no nível de publicação, o que aumentou o tempo de desenvolvimento e introduziu desafios de manutenção e segurança de longo prazo. Com suporte nativo para o OIDC, o AEM Cloud Service remove essa carga fornecendo um mecanismo de autenticação seguro, extensível e com suporte da Adobe para usuários finais que acessam ambientes de publicação.
Esteja você fornecendo um site personalizado do consumidor ou um portal interno autenticado, o OIDC on Publish simplifica a federação de identidades e reduz os riscos por meio de um controle de identidades centralizado. Também ajuda as organizações a atender aos padrões modernos de conformidade e segurança sem sacrificar a agilidade.
Configurar o AEM para autenticação OIDC configure-aem-oidc-authentication
Pré-requisitos prerequisits
Presumimos que as seguintes informações estão disponíveis ou definidas:
- Os caminhos do conteúdo a ser protegido no repositório do AEM
- Um identificador para o IdP a ser configurado. Pode ser qualquer cadeia de caracteres
Informações da configuração do IdP:
- A ID do cliente configurada no IdP
- O segredo do cliente configurado no Idp. Se PKCE foi configurado no Idp, o segredo do cliente não está disponível. Não armazene o valor de texto simples no arquivo de configuração. Usar um segredo CM e referenciá-lo
- Os escopos configurados no Idp. Pelo menos o escopo
openid
deve ser fornecido - Se o PKCE está habilitado no IdP
- O
callbackUrl
é definido usando um dos caminhos configurados definidos no ponto 1 e adicionando o sufixo:/j_security_check
- O
baseUrl
para acessar o arquivo.well-known
padrão. Por exemplo, se a URL conhecida for:https://login.microsoftonline.com/53279d7a-438f-41cd-a6a0-fdb09efc8891/v2.0/.well-known/openid-configuration
abaseUrl
for:https://login.microsoftonline.com/53279d7a-438f-41cd-a6a0-fdb09efc8891
Visão geral dos arquivos de configuração overview-of-the-configuration-files
Encontre abaixo uma lista de arquivos que precisam ser configurados:
- Conexão OIDC: será usada pelo
OidcAuthenticationHandler
para autenticar os usuários ou por outros componentes para autorizar o acesso a recursos protegidos pelo IdP usando OAuth - Manipulador de autenticação OIDC: esse é o manipulador de autenticação usado para autenticar usuários que acessam os caminhos configurados
- UserInfoProcessor: esse componente processa as informações recebidas pelo IdP. Ele pode ser estendido pelos clientes para implementar uma lógica personalizada
- Manipulador de Sincronização Padrão: este componente cria o usuário no repositório
- ExternalLoginModule: este componente autentica o usuário no repositório local do oak.
O diagrama a seguir mostra como os elementos de configuração mencionados são vinculados. Observe que, como esses são ServiceFactory
componentes, ~uniqueid
pode ser qualquer sequência de caracteres exclusiva e aleatória:
Configurar a conexão OIDC configure-the-oidc-connection
Primeiro, precisamos configurar a conexão OIDC. É possível configurar várias conexões OIDC, e cada uma precisa ter um nome diferente.
-
Crie um novo arquivo
.cfg.json
que hospedará a configuração. Por exemplo, você pode usarorg.apache.sling.auth.oauth_client.impl.OidcConnectionImpl~azure.cfg.json
- o sufixo azure deve ser um identificador exclusivo para a conexão -
Siga o formato de configuração no exemplo abaixo:
code language-none { "name":"azure", "scopes":[ "openid" ], "baseUrl":"<https://login.microsoftonline.com/53279d7a-438f-41cd-a6a0-fdb09efc8891/v2.0>", "clientId":"5199fc45-8000-473e-ac63-989f1a78759f", "clientSecret":"xxxxxx" }
-
Configure as propriedades da seguinte maneira:
- O "nome" pode ser definido pelo usuário
baseUrl
,clientid
eclientSecret
são valores de configuração que vêm do IdP.- Os escopos devem conter pelo menos o valor
openid
.
Configurar o manipulador de autenticação OIDC configure-oidc-authentication-handler
Agora, configure o manipulador de autenticação OIDC. Várias conexões OIDC podem ser configuradas. Cada um tem de ter um nome diferente. Se eles compartilharem o mesmo Provedor de Identidade Externo do OAK, eles poderão compartilhar usuários.
-
Crie o arquivo de configuração. Neste exemplo, usaremos
org.apache.sling.auth.oauth_client.impl.OidcConnectionImpl~azure.cfg.json
. O sufixoazure
deve ser um identificador exclusivo. Consulte um exemplo do arquivo de configuração abaixo:code language-none { "path":"/content/tests/us/en/test-7", "callbackUri":"http://localhost:14503/content/tests/us/en/test-7/j_security_check", "pkceEnabled":false, "defaultConnectionName":"azure" "idp": "azure-idp" }
-
Em seguida, configure suas propriedades da seguinte maneira:
path
: o caminho a ser protegidocallbackUri
: ao caminho a ser protegido, adicionando o sufixo:/j_security_check
defaultConnectionName
: configurar com o mesmo nome definido para a conexão OIDC na etapa anterior+pkceEnabled
:true
Chave de Prova para Troca de Código (PKCE) no fluxo de código de Autorizaçãoidp
: o nome do Provedor de Identidade Externo do OAK. Observe que um OAK IDP diferente não pode compartilhar usuários ou grupos
Configurar SlingUserInfoProcessor
-
Crie o arquivo de configuração. Neste exemplo, usaremos
org.apache.sling.auth.oauth_client.impl.SlingUserInfoProcessor~azure.cfg.json
. O sufixoazure
deve ser um identificador exclusivo. Consulte um exemplo do arquivo de configuração abaixo:code language-none { "groupsInIdToken":true, "groupsClaimName": "groups", "connection":"azure", "storeAccessToken": false, "storeRefreshToken": false }
-
Em seguida, configure suas propriedades da seguinte maneira:
groupsInIdToken
: Definido como verdadeiro se os grupos forem enviados no Token de ID. Se o valor for falso, ou não for especificado, os grupos serão lidos do ponto de extremidade UserInfo.groupsClaimName
: O nome da declaração contém os grupos a serem sincronizados no AEM.connection
: configurar com o mesmo nome definido para a conexão OIDC na etapa anteriorstoreAccessToken
: verdadeiro se o token de acesso precisar ser armazenado no repositório. Por padrão, é falso. Defina como verdadeiro somente se o AEM precisar acessar recursos em nome do usuário armazenado em servidores externos protegidos pelo mesmo IdP.storeRefreshToken
: verdadeiro se o token de atualização deve ser armazenado no repositório. Por padrão, é falso. Defina-o como verdadeiro somente se o AEM precisar acessar recursos em nome do usuário armazenado em servidores externos protegidos pelo mesmo IdP e precisar atualizar o token do IdP.
Observe que o token de acesso e o token de atualização são armazenados criptografados com a chave mestre do AEM.
Configurar o Manipulador de sincronização configure-the-synchronization-handler
Pelo menos um Manipulador de sincronização deve ser configurado para sincronizar os usuários autenticados no oak. Para obter mais detalhes, consulte esta página.
Crie um arquivo chamado org.apache.jackrabbit.oak.spi.security.authentication.external.impl.DefaultSyncHandler~azure.cfg.json
. O sufixo azure deve ser um identificador exclusivo. Para obter mais informações sobre como configurar suas propriedades, consulte a documentação sobre Sincronização de Usuários e Grupos do Oak. Encontre um exemplo de configuração abaixo:
{
"user.expirationTime":"300s",
"user.membershipExpTime":"300s",
"user.propertyMapping":[
"profile/familyName=profile/familyName",
"profile/givenName=profile/givenName",
"rep:fullname=cn",
"profile/email=profile/email",
"oauth-tokens"
],
"user.pathPrefix":"azure",
"handler.name":"azure"
}
Abaixo alguns dos atributos mais relevantes a serem configurados em DefaultSyncHandler. Observe que a Associação de grupo dinâmico deve estar sempre habilitada nos Serviços em nuvem.
user.expirationTime
user.membershipExpTime
user.dynamicMembership
user.enforceDynamicMembership
group.dynamicGroups
UserInfoProcessor
sincroniza apenas algumas propriedades. Ele pode ser modificado e personalizado."profile/givenName=profile/given_name",
"profile/familyName=profile/family_name",
"rep:fullname=perfil/nome",
"profile/email=profile/email",
"access_token=access_token",
"atualizar_token=atualizar_token"
user.membershipNestingDepth
Configurar o módulo de logon externo configure-the-external-login-module
Por fim, é necessário configurar o Módulo de logon externo.
-
Crie um arquivo chamado
org.apache.jackrabbit.oak.spi.security.authentication.external.impl.ExternalLoginModuleFactory~azure.cfg.json
. Consulte um exemplo de configuração abaixo:code language-none { "sync.handlerName":"azure", "idp.name":"azure-idp" }
-
Configure suas propriedades da seguinte maneira:
sync.handlerName
: nome do Manipulador de Sincronização definido anteriormenteidp.name
: Provedor de Identidade OAK definido no Manipulador de Autenticação OIDC
Opcional: Implementar um UserInfoProcessor personalizado implement-a-custom-userinfoprocessor
O usuário é autenticado por um Token de ID e atributos adicionais são buscados no ponto de extremidade userInfo
definido para o IdP. Se operações não padrão adicionais tiverem que ser executadas, uma implementação personalizada do UserInfoProcessor será a implementação padrão do Sling.
Exemplo: configurar a autenticação OIDC com o Azure Ative Diretory
Configurar um novo Aplicativo no Azure Ative Diretory configure-a-new-application-in-azure-ad
-
Crie um novo aplicativo no Azure Ative Diretory seguindo a documentação do Azure Ative Diretory. Veja abaixo a aparência da tela que detalha a visão geral do aplicativo:
-
Se forem necessários Grupos ou funções de aplicativo, siga a documentação para habilitá-los para o aplicativo e envie-os no Token de ID. Abaixo, um exemplo de grupos configurados:
-
Siga as etapas documentadas anteriormente para criar os arquivos de configuração necessários. Abaixo um exemplo específico do Azure AD, onde:
- Definimos o nome da conexão OIDC, Manipulador de autenticação e DefaultSyncHandler como:
azure
- A URL do site é:
www.mywebsite.com
- Protegemos o caminho
/content/wknd/us/en/adventures
- O inquilino é:
tennat-id
, - ID do cliente:
client-id
, - O segredo é:
secret
, - Os grupos são enviados no Token de ID em uma declaração chamada:
groups
- Definimos o nome da conexão OIDC, Manipulador de autenticação e DefaultSyncHandler como:
org.apache.sling.auth.oauth_client.impl.OidcConnectionImpl~azure.cfg.json
{
"name":"azure",
"scopes":[
openid", "User.Read", "profile", "email
],
"baseUrl":"https://login.microsoftonline.com/tenant-id/v2.0",
"clientId":"client-id",
"clientSecret":"secret"
}
org.apache.sling.auth.oauth_client.impl.OidcAuthenticationHandler~azure.cfg.json
{
"callbackUri":"https://www.mywebsite.com/content/wknd/us/en/adventures/j_security_check",
"path":[
"/content/wknd/us/en/adventures"
],
"idp":"azure",
"defaultConnectionName":"azure"
}
org.apache.jackrabbit.oak.spi.security.authentication.external.impl.ExternalLoginModuleFactory~azure.cfg.json
{
"sync.handlerName":"azure",
"idp.name":"azure"
}
org.apache.jackrabbit.oak.spi.security.authentication.external.impl.DefaultSyncHandler~azure.cfg.json
{
"user.expirationTime":"1s",
"user.membershipExpTime":"1s",
"user.propertyMapping":[
"profile/givenName=profile/given_name",
"profile/familyName=profile/family_name",
"rep:fullname=profile/name",
"profile/email=profile/email",
"access_token=access_token",
"refresh_token=refresh_token"
],
"user.pathPrefix":"azure",
"group.pathPrefix": "oidc",
"user.membershipNestingDepth": "1",
"handler.name":"azure"
}
org.apache.sling.auth.oauth_client.impl.SlingUserInfoProcessorImpl~azure.cfg.json
{
"groupsInIdToken": "true",
"storeAccessToken": "false",
"storeRefreshToken": "false",
"connection": "azure",
"groupsClaimName": "groups"
}
Informações adicionais sobre grupos do Azure AD additional-information-about-azure-ad-groups
Para configurar um grupo para o aplicativo corporativo no Portal do Microsoft Azure, você precisa pesquisar o aplicativo em: Aplicativos Corporativos e adicionar os grupos:
Para habilitar a declaração de grupo no Token de Id, adicione a declaração na seção Configuração de Token do Portal do Microsoft Azure:
A configuração de SlingUserInfoProcessor
deve ser modificada como no exemplo abaixo.
O nome de arquivo que precisa ser modificado é org.apache.sling.auth.oauth_client.impl.SlingUserInfoProcessorImpl.cfg.json
. O conteúdo deve ser configurado da seguinte maneira:
{
"connection": "azure",
"groupsInIdToken": "true",
"storeAccessToken": "false",
"storeRefreshToken": "false"
}