Construção de Federação de Identidade com SAML Azure AD
Visão Geral
A federação de identidade permite que usuários autenticados por um provedor de identidade acessem recursos gerenciados por outro sem manter credenciais separadas. Esta skill aborda o estabelecimento de federação SAML 2.0 entre o Active Directory local de uma organização (via AD FS ou IdP de terceiros) e o Microsoft Entra ID (antigo Azure AD), bem como a configuração de SSO federado para aplicativos SaaS de terceiros. A federação elimina as preocupações com a sincronização de senhas e mantém a autoridade de autenticação no local, enquanto estende o SSO aos recursos na nuvem.
Quando Usar
- Ao implantar ou configurar recursos de construção de federação de identidade com saml azure ad em seu ambiente
- Ao estabelecer controles de segurança alinhados aos requisitos de conformidade
- Ao construir ou melhorar a arquitetura de segurança para este domínio
- Ao realizar avaliações de segurança que exigem esta implementação
Pré-requisitos
- Domínio do Active Directory local
- AD FS 2019+ ou IdP SAML de terceiros (Okta, Ping, etc.)
- Locatário do Microsoft Entra ID (licença P1 ou P2 recomendada)
- Azure AD Connect (se usar identidade híbrida com sincronização de hash de senha como backup)
- Certificado TLS público para o endpoint de federação
- Registros DNS para o nome do serviço de federação
Conceitos Principais
Modelos de Federação
| Modelo | Autoridade de Autenticação | Caso de Uso |
|---|---|---|
| Federado (AD FS) | AD FS local | Requisito regulatório para manter autenticação no local |
| Gerenciado (PHS) | Azure AD com sincronização de hash de senha | Autenticação de nuvem mais simples, AD FS não necessário |
| Gerenciado (PTA) | Local via agente de passagem | Autenticação em nuvem validada contra AD local |
| Federação de Terceiros | IdP externo (Okta, Ping) | Ambiente com múltiplos IdPs |
Arquitetura de Federação SAML
Usuário → Aplicativo em Nuvem (SP)
│
└── Redirecionar para o Azure AD
│
├── Azure AD verifica domínio federado
│
└── Redirecionar para o AD FS local
│
├── AD FS autentica contra o Active Directory
│
├── AD FS emite token SAML
│
└── Token enviado de volta ao Azure AD
│
├── Azure AD valida a confiança de federação
│
├── Azure AD emite seu próprio token
│
└── Usuário recebe token de acesso para o aplicativo em nuvem
Componentes da Confiança de Federação
| Componente | Descrição |
|---|---|
| Certificado de Assinatura de Token | Certificado X.509 usado pelo IdP para assinar asserções SAML |
| Metadados de Federação | Documento XML que descreve endpoints e capacidades do IdP |
| Confiança da Parte Confiadora | Configuração no AD FS para cada SP (Azure AD) |
| Regras de Declaração | Transformam atributos do AD em declarações SAML |
| URI do Emissor | Identificador único para o IdP (ID da entidade) |
Fluxo de Trabalho
Passo 1: Preparar a Infraestrutura do AD FS
# Instalar a função AD FS
Install-WindowsFeature ADFS-Federation -IncludeManagementTools
# Configurar farm AD FS
Install-AdfsFarm `
-CertificateThumbprint $certThumbprint `
-FederationServiceDisplayName "Serviço de Federação Corp" `
-FederationServiceName "fs.corp.example.com" `
-ServiceAccountCredential $gmsaCredential
# Verificar se o AD FS está operacional
Get-AdfsProperties | Select-Object HostName, Identifier, FederationPassiveAddress
Passo 2: Configurar Domínio Federado no Azure AD
# Instalar o módulo Microsoft Graph PowerShell
Install-Module Microsoft.Graph -Scope CurrentUser
# Conectar ao Microsoft Graph
Connect-MgGraph -Scopes "Domain.ReadWrite.All"
# Converter domínio gerenciado em federado
# Usando URL de metadados de federação do AD FS
$domainId = "corp.example.com"
$federationConfig = @{
issuerUri = "http://fs.corp.example.com/adfs/services/trust"
metadataExchangeUri = "https://fs.corp.example.com/adfs/services/trust/mex"
passiveSignInUri = "https://fs.corp.example.com/adfs/ls/"
signOutUri = "https://fs.corp.example.com/adfs/ls/?wa=wsignout1.0"
signingCertificate = $base64Cert
preferredAuthenticationProtocol = "saml"
}
# Aplicar configurações de federação ao domínio
New-MgDomainFederationConfiguration -DomainId $domainId -BodyParameter $federationConfig
Passo 3: Configurar Regras de Declaração do AD FS
# Adicionar Confiança da Parte Confiadora para o Azure AD
Add-AdfsRelyingPartyTrust `
-Name "Plataforma de Identidade do Microsoft Office 365" `
-MetadataUrl "https://nexus.microsoftonline-p.com/federationmetadata/2007-06/federationmetadata.xml"
# Configurar regras de declaração
$rules = @"
@RuleTemplate = "LdapClaims"
@RuleName = "Extrair Atributos do AD"
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname",
Issuer == "AD AUTHORITY"]
=> issue(store = "Active Directory",
types = ("http://schemas.xmlsoap.org/claims/UPN",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname",
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname"),
query = ";userPrincipalName,mail,givenName,sn;{0}",
param = c.Value);
@RuleTemplate = "PassThroughClaims"
@RuleName = "Passar UPN como NameID"
c:[Type == "http://schemas.xmlsoap.org/claims/UPN"]
=> issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier",
Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer,
Value = c.Value,
ValueType = c.ValueType,
Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"]
= "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent");
"@
Set-AdfsRelyingPartyTrust `
-TargetName "Plataforma de Identidade do Microsoft Office 365" `
-IssuanceTransformRules $rules
Passo 4: Configurar Federação de SaaS de Terceiros
Para cada aplicativo SaaS que suporta SSO SAML via Azure AD:
- Navegue até o Centro de Administração do Microsoft Entra > Aplicativos Corporativos
- Adicione o aplicativo da galeria (ou crie SAML personalizado)
- Configure Single Sign-On > SAML:
- Identificador (ID da Entidade): ID da entidade do aplicativo
- URL de Resposta (ACS): URL do serviço de consumidor de asserção do aplicativo
- URL de Login: URL de login do aplicativo
- Mapeie atributos/declarações do usuário:
- NameID: user.userprincipalname (formato de email)
- Declarações adicionais conforme exigido pelo aplicativo
- Baixe o XML de Metadados de Federação ou certificado
- Configure o aplicativo SaaS com os detalhes de federação do Azure AD
Passo 5: Gerenciamento do Ciclo de Vida do Certificado
Os certificados de assinatura de token do AD FS expiram e devem ser renovados:
# Verificar expiração do certificado atual
Get-AdfsCertificate -CertificateType Token-Signing | Select-Object Thumbprint, NotAfter
# AD FS suporta substituição automática (habilitada por padrão)
Get-AdfsProperties | Select-Object AutoCertificateRollover
# Se a rotação manual for necessária:
# 1. Adicionar novo certificado como secundário
Set-AdfsCertificate -CertificateType Token-Signing -Thumbprint $newThumbprint -IsPrimary $false
# 2. Atualizar o Azure AD com o novo certificado
# 3. Promover a primário
Set-AdfsCertificate -CertificateType Token-Signing -Thumbprint $newThumbprint -IsPrimary $true
# 4. Remover certificado antigo
Remove-AdfsCertificate -CertificateType Token-Signing -Thumbprint $oldThumbprint
Checklist de Validação
- Farm AD FS operacional com certificados TLS e de assinatura de token válidos
- Domínio do Azure AD configurado como federado com metadados corretos
- Regras de declaração transformam adequadamente os atributos do AD em asserções SAML
- Usuário de teste pode autenticar através do fluxo de federação ponta a ponta
- MFA aplicada no AD FS ou no nível de acesso condicional do Azure AD
- Substituição automática de certificado habilitada ou rotação manual agendada
- Endpoint de metadados de federação acessível publicamente
- Bloqueio inteligente configurado para evitar força bruta
- Políticas de bloqueio de extranet configuradas no AD FS
- Monitoramento configurado para saúde do AD FS e expiração de certificados
- Recuperação de desastres: fallback de autenticação gerenciada documentado