This release introduces a new feature that allows the extraction of custom attributes from the SAML Response during user identity processing. The new hook function, `TRIGGER.EXTRACT_USER_IDENTITY`, accepts two parameters:
1. A user dictionary that has been processed by the `extract_user_identity` [function](https://github.com/grafana/django-saml2-auth/blob/cba317c90199d2eaee5fddc6616908613e6771cb/django_saml2_auth/saml.py#L391-L474).
2. A decoded but unvalidated `AuthnResponse` object, provided as a raw XML string.
If this function is implemented, it MUST return the user dictionary or optionally enrich it with additional attributes extracted from the `AuthnResponse`.
> [!WARNING]
> This hook function receives an **unvalidated and unverified** raw XML string. Extreme caution is required to validate the attributes before using them. For example, the `Issuer` and `NameID` attributes should at minimum be verified to contain a valid URL and URN, respectively. For further details, refer to [this discussion](https://github.com/grafana/django-saml2-auth/issues/343#issuecomment-2404905452).
What's Changed
* Extract user identity hook by mostafa in https://github.com/grafana/django-saml2-auth/pull/344
**Full Changelog**: https://github.com/grafana/django-saml2-auth/compare/v3.13.0...v3.15.0