En entornos híbridos de Active Directory y Azure Active Directory (Entra ID), es crucial sincronizar y mapear atributos de usuario de manera efectiva para asegurar una integración fluida entre sistemas locales y en la nube. Uno de los atributos importantes en muchos entornos es el sAMAccountName
, que se utiliza para identificar de manera única a un usuario en Active Directory. En este artículo, te mostramos cómo añadir el atributo sAMAccountName a tu aplicación en Entra ID utilizando PowerShell.
Crear una Propiedad de Extensión para sAMAccountName
Primero, necesitaremos crear una propiedad de extensión en Entra ID para almacenar el sAMAccountName
. Esta propiedad se añadirá a la aplicación específica y permitirá que se incluya el sAMAccountName en los tokens emitidos por Entra ID.
- Obtener el Object ID de la AplicaciónLa variable
$AppObjectId
debe contener el Object ID de la aplicación para la que deseas añadir la propiedad de extensión. Puedes encontrar este ID en el portal de Azure o utilizando PowerShell.
$AppObjectId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
Crear la Propiedad de Extensión
Utiliza el cmdlet New-AzureADApplicationExtensionProperty
para añadir una nueva propiedad de extensión llamada sAMAccountName
. Esta propiedad será de tipo String
y se aplicará a los objetos de tipo User
.
$extensionProperty = New-AzureADApplicationExtensionProperty -ObjectId $AppObjectId -Name "samaccountname" -DataType "String" -TargetObjects "User"
Verificar la Creación de la Propiedad de Extensión
Para confirmar que la propiedad se ha creado correctamente, ejecuta el siguiente comando y revisa la salida:
PS C:\windows\system32> $extensionProperty
ObjectId Name TargetObjects
-------- ---- -------------
cfe1cd61-42a2-4d05-acf7-cef7f2a6731c extension_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_samaccountname {User}
La salida muestra detalles como ObjectId
, Name
y TargetObjects
, confirmando que la propiedad ha sido añadida.
Actualizar el Manifiesto de la Aplicación
Después de crear la propiedad de extensión, es necesario actualizar el manifiesto de la aplicación para incluir el nuevo atributo en la sección optionalClaims
.
- Editar el ManifiestoAccede al manifiesto de la aplicación y añade la propiedad de extensión en la sección
optionalClaims
. Asegúrate de reemplazarXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
con el valor real delObjectId
de tu aplicación:
{
"name": "extension_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_samaccountname",
"source": null,
"essential": false,
"additionalProperties": []
}
Manifiesto:
Crear y Asignar una Política de Mapeo de Reclamos
Para que el sAMAccountName esté disponible en los tokens JWT, necesitamos crear una política de mapeo de reclamos que asocie este atributo con un reclamo en el token.
- Definir la Política de Mapeo de Reclamos Utiliza el siguiente script para crear una política de mapeo de reclamos personalizada. Esta política asignará el atributo sAMAccountName al reclamo sAMAccountName en el token JWT.
$definition = @(
'{"ClaimsMappingPolicy":{"Version":1,"IncludeBasicClaimSet":"true", "ClaimsSchema": [
{"Source":"user","ID":"onpremisessamaccountname","JwtClaimType":"samaccountname"}
]}}'
)
$Policy = New-AzureADPolicy -Definition $definition -DisplayName "CustomClaimsPolicy" -Type "ClaimsMappingPolicy" -IsOrganizationDefault $false
Asignar la Política al Service Principal
Finalmente, asigna la política al Service Principal de la aplicación con el siguiente comando. La variable $ServicePrincipalObjectId
representa el Object ID del Enterprise Application del Service Principal:
$ServicePrincipalObjectId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
Add-AzureADServicePrincipalPolicy -Id $ServicePrincipalObjectId -RefObjectId $Policy.Id
Al acceder a token configuration, podemos ver la extensión de sAMAccountName
Posibles errores:
ServerError: invalid_request: 50146 - [2024-08-08 09:33:04Z]: AADSTS50146: This application is required to be configured with an application-specific signing key. It is either not configured with one, or the key has expired or is not yet valid. Trace ID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX Correlation ID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX Timestamp: 2024-08-08 09:33:04Z - Correlation ID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - Trace ID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Modificación del Manifesto:
Se realizó una actualización en el manifiesto de la aplicación, cambiando las siguientes configuraciones:
Antes:
"acceptMappedClaims": null,
"accessTokenAcceptedVersion": null,
"addIns": [],
"allowPublicClient": null
Después:
"acceptMappedClaims": true,
"accessTokenAcceptedVersion": 2,
"addIns": [],
"allowPublicClient": true
Conclusión
Añadir el atributo sAMAccountName a Entra ID permite una integración más coherente entre Active Directory y servicios en la nube. Siguiendo estos pasos, podrás extender tu aplicación en Entra ID para incluir este atributo en los tokens y asegurarte de que toda la información relevante esté disponible para tus aplicaciones y servicios.
:wq!