Der Fehler bedeutet:
Deine App versucht sich bei Microsoft Entra ID (Azure AD) anzumelden, aber in der App‑Registrierung fehlt die Rückleitungs‑URL (Redirect/Reply URI), die dein Code verwendet.
Ohne passende Redirect‑URI blockt Entra ID den Flow.
Voraussetzungen
- Zugriff auf das Azure-Portal und Microsoft Entra ID Rechte
- App-Registrierung vorhanden (oder gleich neu anlegen)
- Klarheit, welche App-Art du baust:
- WPF/WinForms/Konsole: Mobile and desktop applications
- Web-App: Web
- SPA: Single-page application
Schritt-für-Schritt im Azure-Portal
Microsoft Entra ID öffnen
Azure-Portal → Microsoft Entra ID → App-Registrierungen → deine App auswählen
Zu „Authentifizierung“
„Plattform hinzufügen“ und passend wählen:
- WPF/WinForms/Konsole: Mobile and desktop applications
- Web-App: Web
- SPA: Single-page application
Redirect URIs eintragen
WPF/WinForms/Konsole (MSAL Public Client)
Empfohlen:
texthttps://login.microsoftonline.com/common/oauth2/nativeclient
Optional für Systembrowser:
texthttp://localhost
(ggf. mit Port, z. B. http://localhost:59402)
Web-App (Server/OIDC)
Beispiel:
texthttps://deine-domain.tld/signin-oidc
SPA
Beispiel:
texthttps://deine-domain.tld/auth-callback
Veraltete URIs entfernen
urn:ietf:wg:oauth:2.0:oob unbedingt löschen (deprecated)
Public Client aktivieren (nur Desktop/Konsole)
„Allow public client flows“ → Enabled
Speichern
Code-Beispiele (MSAL)
WPF/Konsole mit Embedded WebView:
csharpvar pca = PublicClientApplicationBuilder
.Create("<CLIENT_ID>")
.WithAuthority(AzureCloudInstance.AzurePublic, "<TENANT_ODER_common>")
.WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
.Build();
var result = await pca.AcquireTokenInteractive(new[] { "User.Read" })
.WithUseEmbeddedWebView(true)
.ExecuteAsync();
WPF/Konsole mit Systembrowser:
csharpvar pca = PublicClientApplicationBuilder
.Create("<CLIENT_ID>")
.WithAuthority(AzureCloudInstance.AzurePublic, "<TENANT_ODER_common>")
.WithRedirectUri("http://localhost") // exakt so in Azure hinterlegen
.Build();
var result = await pca.AcquireTokenInteractive(new[] { "User.Read" })
.ExecuteAsync(); // kein Embedded WebView
Web-App (OIDC, serverseitig):
Verwende den Redirect der OIDC-Middleware (z. B. /signin-oidc)
und trage genau diese URL in Azure ein.
Häufige Stolpersteine
- Redirect-URI stimmt nicht exakt (Groß-/Kleinschreibung, Slash, Port)
- Falsche Plattform gewählt (z. B. Web statt Mobile and desktop applications für WPF)
- Public client flows nicht aktiviert (bei Desktop/Konsole)
- Tenant/Account-Typen passen nicht zum Code:
- Single Tenant → Tenant als GUID/Domain und „Nur Konten in diesem Organisationsverzeichnis“ wählen
- Multi-Tenant →
commonoderorganizationsund in Azure „Mehrere Mandanten“ erlauben
Verifizieren
App beenden und neu starten.
Dann prüfen:
- Redirect-URI in Azure und im Code identisch?
- ClientId und Tenant stimmen? (Azure-Portal → App-Übersicht)
- Mindestens Microsoft Graph „User.Read“ als delegierte Berechtigung hinzugefügt?
Mini-Checkliste
- Richtige Plattform gewählt?
- Redirect-URI korrekt und exakt?
- Public client flows (Desktop/Konsole) aktiviert?
- Supported account types ↔ Tenant im Code konsistent?
- Mindestens „User.Read“ als delegierte Berechtigung vorhanden?
Bonus: Neue App-Registrierung anlegen (kurz)
- Microsoft Entra ID → App-Registrierungen → Neue Registrierung
- Single Tenant oder Multi-Tenant wählen
- Nach Anlage:
- Unter „Authentifizierung“ → Plattform: Mobile and desktop applications
- Redirect-URIs:text
https://login.microsoftonline.com/common/oauth2/nativeclient http://localhost - Public client flows aktivieren
- Unter „API-Berechtigungen“ → Microsoft Graph → Delegiert → User.Read