Skip to content
Go back

Mapeamento de Claims

Published:  at  03:30 PM

Importância do Mapeamento de Claims

Em cenários de federação de identidade, o mapeamento de claims permite:

O Microsoft Entra ID oferece recursos robustos para mapeamento de claims tanto para tokens SAML como para tokens JWT (OAuth2/OIDC).

Configuração via Microsoft Graph API

Para configurar mapeamentos de claims em aplicações SAML:

# Conectar ao Microsoft Graph
Connect-MgGraph -Scopes "Application.ReadWrite.All"

# ID da aplicação a modificar
$appId = "11111111-1111-1111-1111-111111111111"

# Obter o objeto da aplicação
$app = Get-MgApplication -Filter "appId eq '$appId'"

# Definir os mapeamentos de claims SAML
$claimsMappings = @(
    @{
        name = "EmployeeId"
        source = "user"
        saml = @{
            attributeName = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/employeeid"
            attributeNamespace = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims"
        }
    },
    @{
        name = "Department"
        source = "user"
        saml = @{
            attributeName = "department"
            attributeNamespace = "http://schemas.contoso.com/identity/claims"
        }
    }
)

# Atualizar configuração SAML da aplicação
$samlConfiguration = @{
    mappedClaims = $claimsMappings
}

# Aplicar a configuração
Update-MgApplication -ApplicationId $app.Id -SamlMetadataUrl $app.SamlMetadataUrl -SamlSingleSignOnSettings @{
    relayState = $null
}

Para configurações mais avançadas, como mapeamentos baseados em grupos ou expressões condicionais:

# Mapeamento avançado com condições
$advancedMappings = @(
    @{
        name = "Role"
        source = "group"
        saml = @{
            attributeName = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role"
            attributeNamespace = "http://schemas.microsoft.com/ws/2008/06/identity"
        }
        sourceFilter = @("11111111-1111-1111-1111-111111111111", "22222222-2222-2222-2222-222222222222")
    },
    @{
        name = "Country"
        source = "transformation"
        saml = @{
            attributeName = "country"
            attributeNamespace = "http://schemas.contoso.com/identity/claims"
        }
        transformationMethod = "ExtractCountryFromAddress"
    }
)

Mapeamento para Tokens JWT (OAuth2/OIDC)

Para aplicações que usam OAuth2/OIDC:

# Definir mapeamentos personalizados para JWT
$optionalClaims = @{
    idToken = @(
        @{
            name = "employeeid"
            source = "user"
            essential = $false
            additionalProperties = @("emit_as_roles")
        },
        @{
            name = "extension_CustomAttribute"
            source = "user"
            essential = $false
        }
    )
    accessToken = @(
        @{
            name = "department"
            source = "user"
            essential = $false
        }
    )
}

# Atualizar a aplicação
Update-MgApplication -ApplicationId $app.Id -OptionalClaims $optionalClaims

Casos de Uso Comuns

Enviar Membros de Grupo como Funções (Roles)

# Mapeamento de grupos para roles
$groupsAsRolesClaim = @{
    name = "groups"
    source = "user"
    saml = @{
        attributeName = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role"
        attributeNamespace = "http://schemas.microsoft.com/ws/2008/06/identity"
    }
    additionalProperties = @("emit_as_roles")
}

Inclusão de Atributos de Extensão

# Atributos de extensão
$extensionClaim = @{
    name = "extension_ab603c56068041afb2f6832e2a17e237_EmployeeType"
    source = "user"
    saml = @{
        attributeName = "EmployeeType"
        attributeNamespace = "http://schemas.contoso.com/identity/claims"
    }
}

Transformação de Valores

# Exemplo de transformação simples (maiúsculas)
$transformedClaim = @{
    name = "mailNickname"
    source = "transformation"
    saml = @{
        attributeName = "LoginName"
        attributeNamespace = "http://schemas.contoso.com/identity/claims"
    }
    transformationMethod = "ToUpperCase"
}

Validação do Mapeamento

Para validar configurações de mapeamento:

# Testar token SAML
$testUser = "user@contoso.com"
$samlToken = Get-MgApplicationSamlToken -ApplicationId $app.Id -UserId $testUser

# Mostrar claims mapeadas no token
$samlToken.Claims | Where-Object { $_.Type -like "*department*" -or $_.Type -like "*role*" }

Considerações Importantes

Melhores Práticas


Suggest Changes

Previous Post
Identificando Utilizadores Locais, Cloud e Híbridos
Next Post
Obtenção de Tokens de Autenticação para Microsoft Graph API