# Enterprise Applications Enterprise Applications

Referenz für Gallery-Apps, SSO, Provisioning, Zugriff und Betrieb von Enterprise Applications. Reference for gallery apps, SSO, provisioning, access, and operations of enterprise applications.

Katalog Catalog

Gallery-Apps bringen vorkonfigurierte Vorlagen mit, Non-Gallery-Apps sind flexibel für Eigenbau oder seltene SaaS-Lösungen. Gallery apps provide prebuilt templates, while non-gallery apps are flexible for custom or uncommon SaaS solutions.

SSO SSO

Enterprise Applications bündeln SAML, OIDC, Password SSO, Linked Sign-On und Access Policies in einer tenant-lokalen Instanz. Enterprise applications combine SAML, OIDC, password SSO, linked sign-on, and access policies in a tenant-local instance.

Provisioning Provisioning

SCIM ermöglicht automatisiertes Erstellen, Aktualisieren und Deaktivieren von Konten in Zielsystemen. SCIM enables automated creation, update, and deprovisioning of accounts in target systems.

Zugriff Access

Benutzer- und Gruppenzuweisungen, Self-Service und Consent bestimmen, wer die Anwendung verwenden darf. User and group assignment, self-service, and consent determine who may use the application.

## Enterprise Applications im Überblick Enterprise applications overview

Enterprise Applications repräsentieren die tenant-lokale Instanz einer Anwendung. Hier werden Zuweisungen, Single Sign-On, Provisioning, Conditional Access, Consent, Nutzungsberichte und Application Proxy konfiguriert. Enterprise applications represent the tenant-local instance of an application. This is where assignments, single sign-on, provisioning, Conditional Access, consent, usage reports, and Application Proxy are configured.

Einordnung Positioning

Für die Entwicklung startest du meist bei App Registrations. Für Betrieb, Zuweisung und SSO im Tenant arbeitest du überwiegend in Enterprise Applications. For development, you usually start in App Registrations. For tenant-side operations, assignment, and SSO, you mainly work in Enterprise Applications.

## Gallery vs. Non-Gallery Gallery vs non-gallery

Kriterium Criterion | Gallery App Gallery app | Non-Gallery App Non-gallery app
--- | --- | ---
Vorlage Template | Vorkonfiguriert durch Microsoft oder den Anbieter Preconfigured by Microsoft or the vendor | Manuell aufgebaut Built manually
SSO-Assistent SSO wizard | Oft vollständig geführt Often fully guided | Konfiguration eigenständig Self-configured
Provisioning Provisioning | Häufig mit SCIM-Template Often includes SCIM template | Endpoint- und Mapping-Details manuell Endpoints and mappings are manual
Branding Branding | Logo und Beschreibung vorhanden Logo and description available | Eigene Pflege nötig Requires own maintenance
Use Case Use case | Bekannte SaaS-Anbieter Common SaaS vendors | Custom, line-of-business, niche apps Custom, line-of-business, niche apps

## SSO-Methoden SSO methods

Enterprise Applications unterstützen mehrere SSO-Modelle. Die Auswahl hängt davon ab, ob die Ziel-App föderierbar ist, moderne Standards unterstützt oder nur ein gespeichertes Passwort kennt. Enterprise applications support several SSO models. The right choice depends on whether the target app can federate, supports modern standards, or only supports stored credentials.

Methode Method | Geeignet für Best for | Stärken Strengths | Grenzen Limitations
--- | --- | --- | ---
SAML SAML | Klassische SaaS- und Enterprise-Apps Classic SaaS and enterprise apps | Reif, weit verbreitet, claims-basiert Mature, widespread, claims-based | Mehr XML und Zertifikatsmanagement More XML and certificate management
OIDC / OAuth OIDC / OAuth | Moderne Web- und API-Apps Modern web and API apps | Einfachere Tokens, moderne Flows Simpler tokens, modern flows | Benötigt App-seitige OIDC-Unterstützung Requires OIDC support in the app
Password SSO Password SSO | Legacy-Web-Anwendungen Legacy web applications | Keine App-Änderung nötig No app changes needed | Gespeicherte Zugangsdaten, weniger elegant Stored credentials, less elegant
Linked Linked | Externe Login-Seite ohne Föderation External sign-in page without federation | Benutzer erleben Portalstart Users start from the portal | Kein echtes SSO Not true SSO

## SAML Deep Dive SAML deep dive

SAML-Konfiguration besteht aus Vertrauensdaten und Attributen. Entscheidend sind Entity ID/Identifier, Reply URL (ACS), ggf. Sign-on URL, Claim-Regeln und das Signaturzertifikat. SAML configuration consists of trust data and attributes. Key settings are the Entity ID/Identifier, Reply URL (ACS), optional sign-on URL, claim rules, and the signing certificate.

Einstellung Setting | Bedeutung Meaning | Typischer Fehler Typical pitfall
--- | --- | ---
Identifier (Entity ID) Identifier (Entity ID) | Eindeutige Kennung der SP-Anwendung Unique identifier of the service provider | Passt nicht zur Erwartung der App Does not match the app expectation
Reply URL (ACS) Reply URL (ACS) | Empfänger der SAML Response Recipient of the SAML response | Falscher Pfad oder HTTP/HTTPS-Mix Wrong path or HTTP/HTTPS mismatch
Sign-on URL Sign-on URL | Optionaler Einstiegspunkt Optional launch URL | Verwechselt mit ACS Confused with ACS
Logout URL Logout URL | Optionaler SLO-Endpunkt Optional SLO endpoint | App unterstützt kein Single Logout App does not support single logout
NameID NameID | Hauptidentifikator des Benutzers Primary identifier for the user | Format oder Wert falsch Wrong format or value
Claims Claims | Zusätzliche Attribute wie email oder groups Additional attributes such as email or groups | Falsche Quellattribute Incorrect source attributes
Signing Certificate Signing certificate | Entra signiert Assertionen Entra signs assertions | Ablauf nicht überwacht Expiry not monitored
Metadata XML Metadata XML | Import/Export des Vertrauens Import/export of trust | Nach Änderung nicht neu importiert Not reimported after changes

PowerShell PowerShell

                    # Claims Mapping Policy Beispiel für SAML-ähnliche Anpassungen
                    $body = @{
                      definition = @(
                        '{"ClaimsMappingPolicy":{"Version":1,"IncludeBasicClaimSet":"true","ClaimsSchema":[{"Source":"user","ID":"userprincipalname","JwtClaimType":"name"}]}}'
                      )
                      displayName = "SampleClaimsPolicy"
                    } | ConvertTo-Json -Depth 5

                    Invoke-MgGraphRequest -Method POST `
                      -Uri "https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies" `
                      -Body $body `
                      -ContentType "application/json"

## Benutzer- und Gruppenzuweisung User and group assignment

Mit der Option Assignment required steuerst du, ob nur explizit zugewiesene Benutzer und Gruppen die Anwendung starten dürfen. Das ist wichtig für sensible Anwendungen, Testphasen und saubere Lizenzsteuerung. The Assignment required option controls whether only explicitly assigned users and groups may launch the application. This is important for sensitive applications, pilot phases, and clean license control.

- Benutzerzuweisungen sind granular, Gruppen sind für Betrieb und Joiner/Mover/Leaver-Prozesse skalierbarer. User assignments are granular, while groups scale better for operations and joiner/mover/leaver processes.
- Nested-Gruppen werden je nach App und Provisioning-Szenario nicht immer aufgelöst. Nested groups are not always resolved, depending on the app and provisioning scenario.
- Blockiere Self-Service für hochkritische Apps und verlasse dich auf genehmigte Zuweisungen. Disable self-service for highly sensitive apps and rely on approved assignments.

PowerShell PowerShell

                    $sp = Get-MgServicePrincipal -Filter "displayName eq 'Contoso HR App'"
                    $group = Get-MgGroup -Filter "displayName eq 'HR-App-Users'"

                    New-MgGroupAppRoleAssignment `
                      -GroupId $group.Id `
                      -PrincipalId $group.Id `
                      -ResourceId $sp.Id `
                      -AppRoleId ([Guid]::Empty)

## SCIM Provisioning SCIM provisioning

SCIM koppelt den Lebenszyklus von Entra-Benutzern mit Konten im Zielsystem. Typisch sind Create, Update, Disable und Group Push. Vor dem Go-Live sollten Attribute, Matching-Regeln und Deprovisioning-Verhalten in einem Pilot validiert werden. SCIM links the lifecycle of Entra users with accounts in the target system. Typical operations are create, update, disable, and group push. Before go-live, validate attributes, matching rules, and deprovisioning behavior in a pilot.

SCIM Attribut SCIM attribute | Quelle in Entra Source in Entra | Hinweis Note
--- | --- | ---
userName userName | userPrincipalName oder mail userPrincipalName or mail | Primärer Match-Key Primary matching key
active active | accountEnabled accountEnabled | False deaktiviert Konto im Ziel False disables the target account
displayName displayName | displayName displayName | Für UI und Reports For UI and reports
name.givenName name.givenName | givenName givenName | Vorname First name
name.familyName name.familyName | surname surname | Nachname Last name
emails[type eq "work"].value emails[type eq "work"].value | mail mail | Geschäftliche Hauptadresse Primary work address
department department | department department | Für Rollen oder Routing For roles or routing
externalId externalId | objectId oder employeeId objectId or employeeId | Stabiler Match-Wert Stable matching value
manager manager | manager manager | Nicht jede App unterstützt Manager Not every app supports manager
groups groups | App-relevante Gruppen App-relevant groups | Nur nutzen, wenn Zielsystem Gruppen versteht Use only if the target supports groups

Provisioning Logs prüfen Review provisioning logs

Der häufigste Fehler sind falsche Matching-Attribute oder SCIM-Endpoints, die HTTP 401, 403 oder 409 zurückgeben. Prüfe jeden Status im Provisioning Log vor dem Rollout. The most common issues are incorrect matching attributes or SCIM endpoints returning HTTP 401, 403, or 409. Review every status in the provisioning log before rollout.

PowerShell PowerShell

                    $sp = Get-MgServicePrincipal -Filter "displayName eq 'Contoso HR App'"

                    Invoke-MgGraphRequest -Method GET `
                      -Uri "https://graph.microsoft.com/beta/servicePrincipals/$($sp.Id)/synchronization/jobs"

## Application Proxy Application Proxy

Application Proxy veröffentlicht interne Web-Anwendungen sicher über Entra ID. Der Connector baut ausgehend eine Verbindung zu Microsoft auf, sodass keine eingehenden Firewall-Öffnungen in der DMZ erforderlich sind. Application Proxy securely publishes internal web applications through Entra ID. The connector establishes an outbound connection to Microsoft, so no inbound firewall openings in the DMZ are required.

Komponente Component | Aufgabe Role | Hinweis Note
--- | --- | ---
Connector Connector | Verbindet internes Netz mit dem Cloud-Dienst Bridges the internal network to the cloud service | Mehrere Connectoren für HA Use multiple connectors for HA
Connector Group Connector group | Ordnet Apps einem Connector-Set zu Assigns apps to a connector set | Hilfreich für Region oder Segmentierung Useful for region or segmentation
External URL External URL | Öffentliche Adresse für Benutzer Public URL for users | Kann Custom Domain nutzen Can use a custom domain
Internal URL Internal URL | Ursprünglicher Zielendpunkt Original target endpoint | Muss vom Connector erreichbar sein Must be reachable by the connector
Pre-Authentication Pre-authentication | Entra ID oder Passthrough Entra ID or Passthrough | Entra ID bevorzugen Prefer Entra ID

## Self-Service Access Self-service access

Self-Service erlaubt Benutzern das Anfordern von Zugriff aus dem MyApps-Portal. In Verbindung mit Genehmigern, Ablauf und Access Reviews eignet sich das für Standard-SaaS-Lösungen mit nachvollziehbarer Governance. Self-service lets users request access from the MyApps portal. Combined with approvers, expiration, and access reviews, it works well for standard SaaS solutions with traceable governance.

## Consent und Properties Consent and properties

Unter Properties steuerst du Sichtbarkeit, Assignment requirement und Benutzerzugriff. Tenantweite Consent Settings entscheiden zusätzlich, ob Benutzer Drittanbieter-Apps oder nur verifizierten Publishern zustimmen dürfen. Under Properties, you control visibility, assignment requirement, and user access. Tenant-wide consent settings additionally determine whether users may consent to third-party apps or only to verified publishers.

Eigenschaft Property | Wirkung Effect | Praxis Operational guidance
--- | --- | ---
Visible to users Visible to users | Anzeige in MyApps Displayed in MyApps | Für Backend-Only-Apps oft deaktivieren Often disable for backend-only apps
Assignment required Assignment required | Nur zugewiesene Benutzer dürfen starten Only assigned users may start | Für sensible Apps aktivieren Enable for sensitive apps
Enabled for users to sign in Enabled for users to sign in | Globale Startfreigabe Global sign-in permission | Bei Incident Response temporär deaktivieren Temporarily disable during incident response
Notes Notes | Betriebsdokumentation Operational documentation | Owner, Kontakt, SLA dokumentieren Document owner, contact, SLA

## Usage Reports und Monitoring Usage reports and monitoring

Report Report | Frage Question answered | Nutzung Operational use
--- | --- | ---
Sign-ins Sign-ins | Wer hat sich angemeldet? Who signed in? | Fehleranalyse und Adoption Failure analysis and adoption
Audit Logs Audit logs | Wer hat Konfiguration geändert? Who changed configuration? | Change Review Change review
Provisioning Logs Provisioning logs | Welche Konten wurden erstellt oder deaktiviert? Which accounts were created or disabled? | SCIM Monitoring SCIM monitoring
App usage App usage | Wird die App noch aktiv genutzt? Is the app still actively used? | App Cleanup App cleanup
Conditional Access Insights Conditional Access insights | Welche Policies wirken? Which policies apply? | Zugriffsvalidierung Access validation

## PowerShell + Graph PowerShell + Graph

PowerShell PowerShell

                    # Enterprise App finden
                    $sp = Get-MgServicePrincipal -Filter "displayName eq 'Contoso HR App'"

                    # Wichtige Eigenschaften anzeigen
                    $sp | Select-Object Id, AppId, DisplayName, ServicePrincipalType, AccountEnabled

                    # Anwendungszugriff temporär sperren
                    Update-MgServicePrincipal -ServicePrincipalId $sp.Id -AccountEnabled:$false

                    # Notes per Graph aktualisieren
                    $body = @{ notes = "Owner: Identity Team; Review: quarterly" } | ConvertTo-Json
                    Invoke-MgGraphRequest -Method PATCH `
                      -Uri "https://graph.microsoft.com/v1.0/servicePrincipals/$($sp.Id)" `
                      -Body $body `
                      -ContentType "application/json"

## SAML Komplettreferenz Complete SAML reference

SAML-basierte Enterprise Apps leben von präzisen Claims, konsistenten Zertifikaten und sauberem NameID-Design. Die folgende Referenz konzentriert sich auf Request-/Response-Struktur, Claim-Transformationen und Gruppenverhalten.SAML-based enterprise apps depend on precise claims, consistent certificates, and clean NameID design. The following reference focuses on request/response structure, claim transformations, and group behavior.

SAML Sequenz SAML sequence

    Browser -> Service Provider: unauthenticated request
    Service Provider -> Browser: redirect or POST with SAMLRequest
    Browser -> Entra ID: SAMLRequest, RelayState
    Entra ID -> User: sign-in, MFA, Conditional Access
    Entra ID -> Browser: SAMLResponse, RelayState, signature
    Browser -> Service Provider: POST assertion to ACS endpoint
    Service Provider -> Browser: application session established

Element Element | Bedeutung Meaning | Hinweis Note
--- | --- | ---
SAMLRequest SAMLRequest | AuthnRequest des Service Providers mit Issuer, ACS URL und ggf. NameIDPolicy.AuthnRequest from the service provider with issuer, ACS URL, and optionally NameIDPolicy. | Bei HTTP-Redirect meist deflated/base64url codiert.Often deflated/base64 encoded on HTTP-Redirect.
SAMLResponse SAMLResponse | Antwort mit Assertion, Conditions, Audience, AttributeStatement und Signatur.Response containing assertion, conditions, audience, AttributeStatement, and signature. | Zeitfenster und Audience exakt prüfen.Validate time windows and audience precisely.
RelayState RelayState | Anwendungszustand oder Ziel-URL.Application state or target URL. | Nicht als Vertrauensanker verwenden.Do not use as the trust anchor.

### NameID Formate NameID formats

Format Format | Verwendung Use | Kommentar Comment
--- | --- | ---
urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress | Klassische SaaS-Apps Classic SaaS apps | Einfach, aber bei Mail-Änderungen instabil.Simple, but unstable if mail changes.
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent urn:oasis:names:tc:SAML:2.0:nameid-format:persistent | Langfristig stabile Zuordnung Long-term stable mapping | Bevorzugt bei Anwendungen mit eigener Identitätshaltung.Preferred for applications maintaining long-lived identities.
urn:oasis:names:tc:SAML:2.0:nameid-format:transient urn:oasis:names:tc:SAML:2.0:nameid-format:transient | Kurzlebige Sitzungen Short-lived sessions | Gut für Privacy-sensitive Anwendungen.Good for privacy-sensitive apps.
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified | Viele Legacy-Galerie-Apps Many legacy gallery apps | Nur nutzen, wenn das Zielsystem es verlangt.Use only when the target system requires it.
urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName | Windows-/AD-nahe Apps Windows/AD-centric apps | Meist für ältere On-Prem-Systeme.Mostly for older on-prem systems.
urn:oasis:names:tc:SAML:2.0:nameid-format:entity urn:oasis:names:tc:SAML:2.0:nameid-format:entity | Federationsobjekte Federation entities | Selten in Enduser-SaaS.Rare in end-user SaaS.

### Signaturzertifikate verwalten Manage signing certificates

Bereich Area | Best Practice Best practice | Warum Why
--- | --- | ---
Aktives Zertifikat Active certificate | Vor Ablauf überwachen und Notifikationen ernst nehmen.Monitor before expiry and treat notifications seriously. | Verhindert Produktionsausfälle.Prevents production outages.
Next Certificate Next certificate | Vorab veröffentlichen, wenn der Service Provider mehrere Zertifikate akzeptiert.Pre-publish when the service provider accepts multiple certificates. | Ermöglicht überlappende Rotation.Enables overlapping rotation.
Metadaten-Aktualisierung Metadata update | Federation Metadata URL regelmäßig neu einlesen.Refresh federation metadata URL regularly. | Automatisiert Key Rollovers.Automates key rollovers.
Testing Testing | Vor Umschalten Login im Test- und Produktpfad prüfen.Validate login in both test and production paths before switching. | Vermeidet Überraschungen im ACS-Handling.Avoids surprises in ACS handling.

### SAML Claim-Transformationen SAML claim transformations

Transformation Transformation | Nutzen Benefit | Beispiel Example
--- | --- | ---
Join Join | Mehrere Werte in einen Claim zusammenführen.Combine multiple values into one claim. | givenName + ' ' + surname givenName + ' ' + surname
ExtractMailPrefix ExtractMailPrefix | Alias aus Mailadresse ableiten.Derive an alias from the email address. | user@contoso.com -> user user@contoso.com -> user
ToLowercase ToLowercase | Case normalisieren.Normalize case. | MAIL -> mail MAIL -> mail
ToUppercase ToUppercase | Legacy-Systeme mit Uppercase bedienen.Support legacy systems requiring uppercase. | de -> DE de -> DE
RegexReplace RegexReplace | Strukturierte Umschreibung.Structured rewrite. | contoso\\(.*) -> $1 contoso\\(.*) -> $1
Prefix Prefix | Konstante Präfixe setzen.Set constant prefixes. | ID- + employeeId ID- + employeeId
Suffix Suffix | Konstante Suffixe setzen.Set constant suffixes. | user + @legacy user + @legacy
IfEmpty IfEmpty | Fallback-Werte liefern.Provide fallback values. | mail else userPrincipalName mail else userPrincipalName
Constant Constant | Statische Claim-Werte.Static claim values. | tenant=EMEA tenant=EMEA
Contains Contains | Claims nur bei bestimmten Eingaben setzen.Emit claims only for specific inputs. | Department contains HR Department contains HR
FormatString FormatString | Vorlagenbasierte Strings.Template-based strings. | {0}-{1}{0}-{1}
Replace Replace | Teilstrings austauschen.Replace substrings. | @old -> @new@old -> @new

### Benutzerattribute und Claims User attributes and claims

Quelle Source | SAML Claim SAML claim | Beschreibung Description
--- | --- | ---
user.userprincipalname user.userprincipalname | NameID / http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name NameID / http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name | Standard-Loginname Default sign-in name
user.mail user.mail | http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress | E-Mail-Adresse Email address
user.givenname user.givenname | http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname | Vorname Given name
user.surname user.surname | http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname | Nachname Surname
user.displayname user.displayname | displayName displayName | Anzeigename Display name
user.department user.department | department department | Abteilung Department
user.jobtitle user.jobtitle | jobtitle jobtitle | Stellenbezeichnung Job title
user.employeeid user.employeeid | employeeid employeeid | Personalnummer Employee ID
user.objectid user.objectid | http://schemas.microsoft.com/identity/claims/objectidentifier http://schemas.microsoft.com/identity/claims/objectidentifier | Objekt-ID Object ID
user.usertype user.usertype | userType userType | Mitglied oder Gast Member or guest
user.onpremisessamaccountname user.onpremisessamaccountname | onPremisesSamAccountName onPremisesSamAccountName | sAMAccountName aus AD sAMAccountName from AD
user.onpremisessecurityidentifier user.onpremisessecurityidentifier | onPremisesSecurityIdentifier onPremisesSecurityIdentifier | Windows SID Windows SID
user.country user.country | country country | Land Country
user.city user.city | city city | Stadt City
user.state user.state | state state | Bundesland/Region State/region
user.streetaddress user.streetaddress | streetAddress streetAddress | Straße Street
user.postalcode user.postalcode | postalCode postalCode | Postleitzahl Postal code
user.telephonenumber user.telephonenumber | telephoneNumber telephoneNumber | Telefonnummer Telephone number
user.extensionattribute1 user.extensionattribute1 | extensionAttribute1 extensionAttribute1 | Freies Attribut 1 Custom attribute 1
user.extensionattribute2 user.extensionattribute2 | extensionAttribute2 extensionAttribute2 | Freies Attribut 2 Custom attribute 2
user.extensionattribute3 user.extensionattribute3 | extensionAttribute3 extensionAttribute3 | Freies Attribut 3 Custom attribute 3
user.extensionattribute4 user.extensionattribute4 | extensionAttribute4 extensionAttribute4 | Freies Attribut 4 Custom attribute 4
user.extensionattribute5 user.extensionattribute5 | extensionAttribute5 extensionAttribute5 | Freies Attribut 5 Custom attribute 5

### Mehrwertige Gruppenclaims und Filter Multi-valued group claims and filtering

Option Option | Effekt Effect | Kommentar Comment
--- | --- | ---
Alle Gruppen All groups | Große Assertions und mögliches Overage-Risiko.Large assertions and possible overage risk. | Nur bei wenigen Gruppen sinnvoll.Suitable only for users with few groups.
Sicherheitsgruppen Security groups | Reduziert Rauschen gegenüber M365-Gruppen.Reduces noise compared to M365 groups. | Gute Voreinstellung für SaaS-Autorisierung.Good default for SaaS authorization.
Der App zugewiesene Gruppen Groups assigned to the app | Nur relevante Gruppen werden emittiert.Only relevant groups are emitted. | Bevorzugte Option für Token-Größe.Preferred option for token size.
Gruppenfilter nach Anzeigename/Attribut Group filtering by display name/attribute | Nur fachlich relevante Gruppenclaims.Only business-relevant group claims. | Regelmäßig gegen Namensänderungen prüfen.Review regularly against naming changes.

## SCIM 2.0 Deep Dive SCIM 2.0 deep dive

SCIM Provisioning verbindet Entra ID mit Zielsystemen über standardisierte Ressourcen wie /Users und /Groups. Erfolgreiche Provisionierung hängt dabei weniger vom Protokoll als von sauberem Mapping, Scope und Monitoring ab.SCIM provisioning connects Entra ID with target systems through standardized resources such as /Users and /Groups. Successful provisioning depends less on the protocol itself than on clean mappings, scope, and monitoring.

Bereich Area | Kernaussage Key point | Praxis Practice
--- | --- | ---
SCIM Ressourcen SCIM resources | Users, Groups und PATCH sind die Kernobjekte.Users, Groups, and PATCH are the core objects. | Schema früh mit dem Vendor abgleichen.Align the schema with the vendor early.
Provisioning Agent Provisioning agent | Für einige On-Prem-Apps ist der lokale Agent nötig.Some on-prem apps require the local agent. | Outbound-Erreichbarkeit und Servicekonto planen.Plan outbound reachability and the service account.
Attribut-Mappings Attribute mappings | Mappingfehler sind die häufigste Fehlerquelle.Mapping errors are the most common source of failures. | Immer Testbenutzer mit Extremwerten nutzen.Always use test users with edge-case values.

### Mapping-Ausdrücke Mapping expressions

Syntax Syntax | Nutzen Use | Beispiel Example
--- | --- | ---
IIF(condition, trueValue, falseValue)IIF(condition, trueValue, falseValue) | Bedingte Zuweisung Conditional mapping | IIF(IsPresent([mail]), [mail], [userPrincipalName])IIF(IsPresent([mail]), [mail], [userPrincipalName])
Switch(value, default, case1, result1,...)Switch(value, default, case1, result1,...) | Mehrfachauswahl Multi-branch mapping | Switch([department], "General", "HR", "Human Resources", "IT", "Technology")Switch([department], "General", "HR", "Human Resources", "IT", "Technology")
Append(a,b)Append(a,b) | Strings verketten Append strings | Append([givenName], " ")Append([givenName], " ")
Join(";", [proxyAddresses])Join(";", [proxyAddresses]) | Mehrwerte zusammenführen Join multi-values | Join(";", [memberOf])Join(";", [memberOf])
IgnoreFlowIfNullOrEmpty(value)IgnoreFlowIfNullOrEmpty(value) | Leere Werte unterdrücken Suppress empty values | IgnoreFlowIfNullOrEmpty([employeeId])IgnoreFlowIfNullOrEmpty([employeeId])
Replace(value, old, new)Replace(value, old, new) | Zeichen ersetzen Replace characters | Replace([userPrincipalName], "@contoso.com", "@fabrikam.com")Replace([userPrincipalName], "@contoso.com", "@fabrikam.com")
ToLower(value)ToLower(value) | Kleinbuchstaben Lowercase | ToLower([mailNickname])ToLower([mailNickname])
ToUpper(value)ToUpper(value) | Großbuchstaben Uppercase | ToUpper([country])ToUpper([country])
Left(value, length)Left(value, length) | Linker Teilstring Left substring | Left([employeeId], 4)Left([employeeId], 4)
Right(value, length)Right(value, length) | Rechter Teilstring Right substring | Right([employeeId], 4)Right([employeeId], 4)
Mid(value, start, length)Mid(value, start, length) | Mittlerer Teilstring Mid substring | Mid([userPrincipalName], 1, 5)Mid([userPrincipalName], 1, 5)
NormalizeDiacritics(value)NormalizeDiacritics(value) | Umlaute und Akzente normalisieren Normalize accents | NormalizeDiacritics([displayName])NormalizeDiacritics([displayName])
StripSpaces(value)StripSpaces(value) | Leerzeichen entfernen Strip spaces | StripSpaces([employeeId])StripSpaces([employeeId])
CStr(value)CStr(value) | In String umwandeln Cast to string | CStr([employeeNumber])CStr([employeeNumber])

### Provisioning Scope und Ausführung Provisioning scope and execution

Thema Topic | Beschreibung Description | Hinweis Note
--- | --- | ---
Scope Scope | Nur zugewiesene Benutzer/Gruppen oder alle passenden Objekte provisionieren.Provision only assigned users/groups or all matching objects. | Mit kleinem Pilot beginnen.Start with a small pilot.
On-demand Provisioning On-demand provisioning | Einzelobjekte ad hoc testen und Logs sofort prüfen.Test single objects ad hoc and inspect logs immediately. | Bestes Werkzeug für Mapping-Debugging.Best tool for mapping debugging.
Quarantine Quarantine | Wiederholte Fehler versetzen die App in Quarantäne.Repeated failures place the app in quarantine. | Root Cause beheben und erst dann fortsetzen.Fix the root cause before resuming.

### Logs analysieren Analyze logs

Logtyp Log type | Frage Question | Typischer Befund Typical finding
--- | --- | ---
Provisioning Logs Provisioning logs | Wurde ein Objekt erstellt, aktualisiert oder übersprungen?Was an object created, updated, or skipped? | Attribut fehlt, Zielsystem lehnt Wert ab, Duplikat erkannt.Attribute missing, target rejects value, duplicate detected.
Audit Logs Audit logs | Wer hat Mapping oder Scope geändert?Who changed mapping or scope? | Portaländerungen und Admin-Aktionen.Portal changes and admin actions.
Target Logs Target logs | Kam der PATCH/POST sauber an?Did the PATCH/POST arrive correctly? | 400/409 wegen Format oder Eindeutigkeit.400/409 due to format or uniqueness.

SCIM PATCH Beispiel SCIM PATCH example

    PATCH /scim/v2/Users/2819c223-7f76-453a-919d-413861904646
    Content-Type: application/scim+json

    {
      "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
      "Operations": [
        {
          "op": "Replace",
          "path": "active",
          "value": true
        },
        {
          "op": "Replace",
          "path": "name.givenName",
          "value": "Alex"
        }
      ]
    }

## Application Proxy Deep Dive Application Proxy deep dive

Application Proxy ermöglicht den sicheren externen Zugriff auf interne Webanwendungen, ohne eingehende Firewall-Freigaben für die Anwendung selbst. Entscheidend sind Connector-Platzierung, Pre-Authentication und Backend-SSO.Application Proxy enables secure external access to internal web applications without inbound firewall openings for the application itself. Connector placement, pre-authentication, and backend SSO are the key design points.

Bereich Area | Empfehlung Recommendation | Warum Why
--- | --- | ---
Architektur Architecture | Connectoren nah an Backend und nah an DC/KDC platzieren.Place connectors close to the backend and close to DC/KDC resources. | Reduziert Latenz und KCD-Probleme.Reduces latency and KCD problems.
Connector Groups Connector groups | Pro Anwendung oder Zone passende Gruppen bilden.Create connector groups per application or zone. | Erleichtert HA und Routing.Simplifies HA and routing.
HA HA | Mindestens zwei Connectoren pro kritischer Gruppe.At least two connectors per critical group. | Einzelserver dürfen kein SPOF sein.Single servers must not be a SPOF.
Custom Domains/TLS Custom domains/TLS | Öffentliche Zertifikate, DNS und Backend-URL sauber abstimmen.Align public certificates, DNS, and the backend URL cleanly. | Verhindert Mixed-Host- oder Cookie-Probleme.Prevents mixed-host or cookie issues.

### Pre-Authentication und Backend-SSO Pre-authentication and backend SSO

Thema Topic | Optionen Options | Kommentar Comment
--- | --- | ---
Pre-Authentication Pre-authentication | Entra ID oder Passthrough Entra ID or passthrough | Entra ID ist für MFA und Conditional Access meist vorzuziehen.Entra ID is usually preferable for MFA and Conditional Access.
Backend-SSO Backend SSO | Header-basiert, Passwortvault, Kerberos Constrained Delegation Header-based, password vault, Kerberos Constrained Delegation | Von der Altanwendung abhängig.Depends on the legacy application.
KCD KCD | SPN, Delegation, Connector-Computerobjekt und Browser-URL müssen zusammenpassen.SPN, delegation, connector computer object, and browser URL must align. | Häufigste Fehlerquelle bei Windows Integrated Auth.Most common failure point for Windows Integrated Auth.

KCD Prüfschritte KCD validation steps

    setspn -Q HTTP/app.internal.contoso.com
    setspn -Q HTTP/app.contoso.com

    # Connector-Computerobjekt in AD für constrained delegation prüfen
    # Check the connector computer object in AD for constrained delegation

    Invoke-WebRequest https://app.contoso.com -UseBasicParsing

Fehlerbild Symptom | Prüfung Check | Lösung Resolution
--- | --- | ---
404 oder 502 404 or 502 | Connector erreicht Backend nicht oder Pfad falsch.Connector cannot reach backend or path is wrong. | Backend-URL, DNS und Firewall prüfen.Check backend URL, DNS, and firewall.
Login-Loop Login loop | Cookies, Header Rewrite, Reply URLs und Host Header prüfen.Review cookies, header rewrite, reply URLs, and host headers. | Custom Domain und Backend-Host konsistent halten.Keep custom domain and backend host consistent.
Kerberos Failure Kerberos failure | SPN, Delegation, Zeit und KDC-Erreichbarkeit prüfen.Check SPN, delegation, time sync, and KDC reachability. | KCD-Konfiguration korrigieren.Fix the KCD configuration.
Langsame Antwort Slow response | Connector-Auslastung und Platzierung prüfen.Check connector load and placement. | Mehr Connectoren oder andere Gruppe verwenden.Use more connectors or another group.