Determinando qual IdP usar para SSO de Federação
Como Provedor de Serviços, ao acionar uma operação SSO de Federação, às vezes o principal desafio reside em determinar qual IdP será selecionado para o fluxo SSO, nos casos em que o SP tenha acordos de confiança com vários IdPs.
O OAM/SP tem um mecanismo diferente para selecionar o IdP para a operação SSO da Federação, incluindo:
-
Tendo o Esquema de Federação do OAM indicando o IdP a ser usado
-
Ter um Plug-in de Autenticação do OAM personalizado que defina IdP para ser usado
-
Usando um Serviço de Descoberta SAML 2.0 IdP se o IdP não tiver sido especificado pelo Esquema nem por um plug-in personalizado
-
Usando o SSO padrão IdP se nenhum Serviço de Descoberta IdP for usado
A seção a seguir explora cada mecanismo detalhadamente.
Esquema de Federação do OAM
O OAM fornece ferramentas de administração para criar um Esquema de Autenticação do OAM que será:
-
Um Esquema de Federação
-
Limitado a um parceiro IdP específico
Quando um recurso é protegido com esse tipo de Esquema de Autenticação e, se um usuário não autenticado solicitar acesso, um fluxo de SSO de Federação será acionado com o Parceiro IdP ao qual o esquema está vinculado.
A criação desses esquemas permite que um administrador tenha recursos específicos que resultam em um SSO de Federação com Parceiros IdP específicos.
Observação: se o usuário já tiver sido autenticado com uma sessão válida que tenha um nível suficientemente forte, o acesso a recursos protegidos por outros Esquemas de Federação poderá não resultar em um novo SSO de Federação.
Console de Administração do OAM
Para criar um Esquema de Autenticação do OAM para um Parceiro IdP específico, execute as seguintes etapas:
-
Vá para a Console de Administração do OAM:
http(s)://oam-admin-host:oam-adminport/oamconsole
. -
Navegue até Federação de Identidades, Administração do Provedor de Serviços.
-
Abra o Parceiro IdP para o qual deseja criar o esquema.
-
Clique no botão Criar Módulo e Esquema de Autenticação.
Descrição da ilustração OAM_Admin_Console.jpg
A Console de Administração do OAM cria:
-
Um Módulo de Autenticação do OAM vinculado a este Parceiro IdP chamado
<PARTNER_NAME>FederationPlugin
. -
Um Esquema de Autenticação do OAM vinculado ao Módulo de Autenticação do OAM recém-criado chamado
<PARTNER_NAME>FederationScheme
.
Descrição da ilustração OAM_Admin_Console_with_message.jpg
Comando WLST
Para criar um Esquema de Autenticação do OAM para um Parceiro IdP específico usando o comando WLST createAuthnSchemeAndModule()
do OAM, execute as seguintes etapas:
-
Informe o ambiente WLST executando:
$IAM_ORACLE_HOME/common/bin/wlst.sh
. -
Conecte-se ao servidor de Administração WLS:
connect()
. -
Navegue até a ramificação Runtime do Domínio:
domainRuntime()
. -
Execute o comando
createAuthnSchemeAndModule()
: Especifique o Nome do Parceiro IdP. Um exemplo é:createAuthnSchemeAndModule("AcmeIdP")
. -
Saia do ambiente WLST:
exit()
.
Observação: para excluir esse Esquema/Módulo de Federação, execute o comando WLST
deleteAuthnSchemeAndModule()
do OAM.
Protegendo um Recurso
Para proteger um recurso com um <PARTNER_NAME>FederationScheme
que aciona o SSO da Federação com esse Parceiro IdP específico, execute as seguintes etapas:
-
Vá para a Console de Administração do OAM:
http(s)://oam-admin-host:oam-adminport/oamconsole
. -
Navegue até Gerenciador de Acesso, Domínio de Aplicativo.
-
Clique em Pesquisar e abra o Domínio de Aplicativos que contém os recursos que você deseja proteger com o novo
FederationScheme
. -
Clique na guia Políticas de Autenticação.
-
Crie uma nova Política de Autenticação ou edite uma existente.
-
Selecione o novo
FederationScheme
. -
Clique em Aplicar.
Descrição da ilustração Authentication_Policies.jpg
Após fazer essa alteração, sempre que um usuário solicitar recursos protegidos por esta Política de Autenticação e o usuário precisar ser autenticado, um SSO de Federação será executado com o Parceiro IdP específico (AcmeIdP neste exemplo).
Plug de Autenticação OAM Personalizado
Visão Geral
Um Módulo de Autenticação do OAM é:
-
Um conjunto de Plug-ins de Autenticação
-
Uma orquestração que determina a ordem de execução dos plug-ins
O Módulo de Autenticação de Federação OOTB, chamado FederationPlugin
, é feito de dois plug-ins:
-
FedAuthnRequestPlugin: Inicia o fluxo de SSO da Federação, determina qual IdP usar, cria uma solicitação de SSO e redireciona o usuário para IdP
-
AssertionProcessing: Processa uma resposta SAML/OpenID SSO de entrada e mapeia a mensagem para um registro de usuário local no diretório LDAP
A orquestração pode ser vista por:
-
Vá para a Console de Administração do OAM:
http(s)://oam-admin-host:oam-adminport/oamconsole
. -
Navegue até Gerenciador de Acesso, Módulos de Autenticação.
-
Abra
FederationScheme
. -
Clique na guia de etapas para ver os plug-ins.
-
Clique na guia Orquestração de Etapas para ver a orquestração entre os diferentes plug-ins e o plug-in usado para iniciar a operação.
Descrição da ilustração Steps_Orchestration.jpg
Implementando um Plugin Personalizado
Um plug-in personalizado pode ser implementado com base na estrutura do Plug-in de Autenticação Personalizado do OAM que determina o IdP a ser usado para uma operação SSO de Federação específica:
-
O plug-in determina qual IdP precisa ser usado por meio de uma abordagem específica (cookie, seleção do usuário por meio de uma página, programática...)
-
Depois que a seleção for concluída, o plug-in precisará salvar o nome do Parceiro IdP na instância de Credencial salva em
AuthenticationContext
-
O plug-in retorna um status de sucesso
-
O OAM chama o próximo plug-in (
FedAuthnRequestPlugin
) que recupera o Nome do Parceiro IdP doAuthenticationContext
-
O SSO da Federação é iniciado com esse IdP
O código para salvar o nome do Parceiro IdP no AuthenticationContext
é semelhante a:
public ExecutionStatus
process(AuthenticationContext context)
{
...
CredentialParam param = new CredentialParam();
param.setName("KEY_FEDIDP");
param.setType("string");
param.setValue(IDP_PARTNER_NAME);
context.getCredential().addCredentialParam("KEY_FEDIDP", param);
...
return ExecutionStatus.SUCCESS;
}
Depois que o plug-in é implementado:
-
Ela precisa ser empacotada, carregada, distribuída e ativada
-
Um novo Módulo de Autenticação precisa ser criado com três plug-ins
-
O plug-in personalizado
-
FedAuthnRequestPlugin
-
AssertionProcessing
-
-
A orquestração precisa ser definida com:
-
O plug-in personalizado sendo o Plugin Personalizado da Etapa Inicial:
-
Em Caso de Sucesso,
FedAuthnRequestPlugin
é chamado -
Em Caso de Falha, a falha é retornada em Caso de Erro
-
-
FedAuthnRequestPlugin :
-
Com Sucesso, o sucesso deve ser retornado
-
Em Caso de Falha, AssertionProcessing deve ser chamado
-
Em Caso de Erro, a falha deve ser retornada
-
-
Plugin Personalizado:
-
Com Sucesso, o sucesso deve ser retornado
-
Em Caso de Falha, a falha deve ser retornada Em Caso de Erro, a falha deve ser retornada
-
-
-
Um novo Esquema de Autenticação do OAM deve ser criado usando o novo Módulo de Autenticação do OAM. O novo esquema deve ser semelhante ao OOTB FederationScheme.
Por fim, você pode proteger recursos usando o novo Esquema do OAM, que usa o Módulo/Plug-ins de Autenticação personalizados para executar a operação SSO de Federação.
Observação: veja mais informações sobre plug-ins personalizados no guia do Desenvolvedor do OAM.
IdP Serviço de Descoberta
Visão Geral
A especificação SAML 2.0 "Identity Provider Discovery Service Protocol and Profile" define uma forma de SPs SAML 2.0 delegarem a seleção IdP a um serviço remoto.
O fluxo é descrito na especificação SAML 2.0 e é feito das seguintes etapas:
-
O SP está configurado para usar um Serviço de Descoberta IdP remoto para determinar o IdP a ser usado para a operação SSO de Federação.
-
O SP redireciona o usuário para o Serviço de Descoberta IdP por meio de um redirecionamento HTTP 302 e fornece os seguintes parâmetros na string de consulta.
-
entityID
: O Emissor/ProviderID do OAM/SP -
returnIDParam
: O nome do parâmetro da string de consulta que o serviço precisa usar para o parâmetro que contém o valor IdP ProviderID, ao redirecionar o usuário de volta para OAM/SP -
return
: O URL a ser usado para redirecionar o usuário para o OAM/SP
-
-
O serviço determina o IdP a ser usado
-
O serviço redireciona o usuário para o OAM/SP por meio de um redirecionamento HTTP 302 com base no parâmetro de consulta "return" especificado pelo SP e fornece os parâmetros a seguir na string de consulta.
-
Um parâmetro de consulta que contém o valor IdP ProviderID; o nome desse parâmetro de consulta é especificado pelo SP no parâmetro de consulta returnIDParam.
-
Configuração do OAM/SP
Você pode configurar o OAM/SP para usar qualquer Serviço de Descoberta IdP remoto. O OAM inclui um IdP Discovery Service simples que é usado e permite que o usuário escolha com qual IdP executar o SSO de Federação. Para configurar o OAM/SP para usar um Serviço de Descoberta IdP, execute as seguintes etapas:
-
Informe o ambiente WLST executando:
$IAM_ORACLE_HOME/common/bin/wlst.sh
. -
Conecte-se ao servidor de Administração WLS:
connect()
. -
Navegue até a ramificação Runtime do Domínio:
domainRuntime()
. -
Ative/desative o OAM/SP para usar um Serviço de Descoberta IdP:
putBooleanProperty("/spglobal /idpdiscoveryserviceenabled", "true/false")
.-
Para ativar:
putBooleanProperty("/spglobal /idpdiscoveryserviceenabled", "true")
-
Para desativar
putBooleanProperty("/spglobal /idpdiscoveryserviceenabled", "false")
-
-
Defina a localização do Serviço de Descoberta IdP remoto:
putStringProperty("/spglobal /idpdiscoveryserviceurl", "URL")
. -
Substitua o URL pelo local do serviço.
-
Para o Serviço de Descoberta IdP simples empacotado, substitua o URL por
/oamfed/discovery.jsp
(este é o valor OOTB para esta propriedade):putStringProperty("/spglobal /idpdiscoveryserviceurl", "/oamfed/discovery.jsp")
. -
Para um serviço remoto, um exemplo é:
putStringProperty("/spglobal /idpdiscoveryserviceurl", "http://sp.com/discovery")
.
-
-
Saia do ambiente WLST:
exit()
.
Para usar o Serviço de Descoberta IdP simples empacotado, execute as seguintes etapas:
-
Informe o ambiente WLST executando:
$IAM_ORACLE_HOME/common/bin/wlst.sh
. -
Conecte-se ao servidor de Administração WLS:
connect()
. -
Navegue até a ramificação Runtime do Domínio:
domainRuntime()
. -
Ative/desative o Serviço de Descoberta IdP empacotado:
putBooleanProperty("/spglobal /idpdiscoveryservicepageenabled", "true/false")
.-
Para ativar:
putBooleanProperty("/spglobal /idpdiscoveryservicepageenabled", "true")
. -
Para desativar
putBooleanProperty("/spglobal /idpdiscoveryservicepageenabled", "false")
.
-
-
Saia do ambiente WLST:
exit()
.
Teste
Em meu ambiente de teste, tenho três IdPs:
-
AcmeIdP: SAML 2.0 IdP
-
Google: o Google OpenID OP
-
Yahoo: o Yahoo OpenID OP
O OAM/SP está configurado para:
-
Usar um IdP Discovery Service
-
Redirecionar o usuário para o Serviço de Descoberta IdP simples empacotado
-
Tenha o Serviço de Descoberta IdP simples empacotado ativado
Se o usuário solicitar acesso a um recurso protegido pelo FederationScheme
, o Serviço de Descoberta IdP simples empacotado solicitará que o usuário selecione um IdP para executar SSO de Federação com:
Descrição da ilustração Access_Manager.jpg
Provedor de Identidade SSO Padrão
Se nenhum dos métodos anteriores for usado para indicar qual IdP será usado para SSO da Federação, o OAM/SP usará o Parceiro IdP que foi marcado como Provedor de Identidades SSO Padrão.
Console de Administração do OAM
Para indicar que um Parceiro IdP específico deve ser o Provedor de Identidades SSO Padrão por meio da Console de Administração do OAM, execute as seguintes etapas:
-
Vá para a Console de Administração do OAM:
http(s)://oam-admin-host:oam-adminport/oamconsole
. -
Navegue até Federação de Identidades, Administração do Provedor de Serviços.
-
Abra o Parceiro IdP.
-
Marque a caixa Parceiro do Provedor de Identidades Padrão.
-
Clique em Aplicar.
Descrição da ilustração Default_Identity_Provider.jpg
Comando WLST
Para indicar um Parceiro IdP específico deve ser o Provedor de Identidades SSO Padrão usando o comando WLST setDefaultSSOIdPPartner()
do OAM, execute as seguintes etapas:
-
Informe o ambiente WLST executando:
$IAM_ORACLE_HOME/common/bin/wlst.sh
. -
Conecte-se ao servidor de Administração WLS:
connect()
. -
Navegue até a ramificação Runtime do Domínio:
domainRuntime()
. -
Execute o comando
setDefaultSSOIdPPartner()
. -
Especifique o Nome do Parceiro IdP. Um exemplo é:
setDefaultSSOIdPPartner("AcmeIdP")
. -
Saia do ambiente WLST:
exit()
.
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Determining which IdP to use for Federation
F60233-01
September 2022
Copyright © 2022, Oracle and/or its affiliates.