Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln innehåller lösningar på vanliga nonce-valideringsfel som du kan stöta på i ASP.NET MVC-appar med hjälp av Mellanprogram för OpenID Connect (OIDC).
Vanliga felmeddelanden
Beroende på vilken version av Open Web Interface för .NET (OWIN) som du använder kan du få något av följande felmeddelanden:
IDX21323: RequireNonce är "[PII är dold som standard. Ange flaggan "ShowPII" i IdentityModelEventSource.cs till true för att visa den.]'. OpenIdConnectProtocolValidationContext.Nonce var null, OpenIdConnectProtocol.ValidatedIdToken.Payload.Nonce var inte null. Det går inte att verifiera nonce. Om du inte behöver kontrollera nonce anger du OpenIdConnectProtocolValidator.RequireNonce till false.
IDX10311: RequireNonce är "true" (standard) men validationContext.Nonce är null. Det går inte att verifiera en nonce. Om du inte behöver kontrollera nonce anger du OpenIdConnectProtocolValidator.RequireNonce till false.
Förstå nonce cookies
ASP.NET OIDC-mellanprogrammet använder en nonce-cookie för att förhindra reprisattacker. Appen genererar undantaget om den inte kan hitta nonce-cookien i den autentiserade begäran. Cookies är domänbaserade. Det innebär att om cookies anges för en specifik domän kommer alla efterföljande begäranden till den domänen att inkludera cookies tills de upphör att gälla eller tas bort.
Följande Fiddler-spårningar beskriver hur dessa cookies anges och används i ett arbetsflöde:
I Bildruta 116 skickar webbläsaren en begäran till OIDC-appen som skyddas av Microsoft Entra-ID. När du har tagit emot begäran identifierar appen att den inte är autentiserad. Sedan omdirigeras begäran till Microsoft Entra ID (
login.microsoftonline.com
) för autentisering. Dessutom anger appen cookienOpenIdConnect.nonce
i omdirigeringssvaret "302".Efter lyckad autentisering (bildruta 120-228) omdirigerar Microsoft Entra ID begäran tillbaka till webbappen (bildruta 229) tillsammans med den autentiserade ID-token. Den nonce-cookie som tidigare angetts för den här domänen ingår också i POST-begäran. OIDC-mellanprogrammet validerar den autentiserade token och nonce-cookien innan den fortsätter att läsa in sidan (via en annan omdirigering). Nu är nonce-cookiens syfte slutfört och appen ogiltigförklarar den genom att ange att förfalloattributet ska upphöra att gälla.
Lösning
Orsak 1: Flera domäner används för samma webbplats
Webbläsaren navigerar ursprungligen till appen på domän A (bildruta 9) och nonce-cookien har angetts för den här domänen. Senare skickar Microsoft Entra-ID:t den autentiserade token till domän B (bildruta 91). Eftersom omdirigeringen till domän B inte innehåller nonce-cookien genererar webbappen validationContext.Nonce is null
felet.
Lösning 1
Följ dessa anvisningar för att lösa problemet:
Omdirigera begäran tillbaka till samma domän som ursprungligen användes efter autentiseringen. Om du vill styra var Azure AD skickade tillbaka den autentiserade begäran till appen anger du
OpenIdConnectAuthentications.RedirectUri
egenskapen iConfigureAuth
-metoden.Konfigurera omdirigerings-URI :n (svars-URL) i Appregistrering. Annars kan du få följande fel: AADSTS50011: Svars-URL:en som anges i begäran matchar inte de svars-URL:er som Azure har konfigurerat för appen. Mer information finns i Fel AADSTS50011 med OpenID-autentisering.
Orsak 2: SameSite-attribut saknas
På grund av säkerhetsuppdateringarna för SameSite-cookien bör alla cookies som ingår i autentiseringsprocessen (inklusive Nonce-cookies) innehålla följande attribut:
- SameSite=None
- Säkra
Mer information finns i SameSite-cookies och Öppna webbgränssnitt för .NET.
Lösning 2
Följ dessa steg för att se till att båda de obligatoriska attributen ingår:
- Använd HTTPS-protokollet för att navigera till webbappen.
- Uppdatera .NET Framework- och NuGet-paket:
- För .NET Framework-appar: Uppgradera .NET Framework till version 4.7.2+ och relevanta NuGet-paket (Microsoft.Owin.Security.OpenIdConnect, Microsoft.Owin) till version 4.1.0+.
- För .NET Core-appar:
- Version 2.x appar ska använda .NET Core 2.1+.
- Version 3.x appar ska använda .NET Core 3.1+.
Exempel på konfigurationskod för Startup.Auth.cs:
using System.Configuration;
using Owin;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Cookies;
using Microsoft.Owin.Security.OpenIdConnect;
using System.Threading.Tasks;
using Microsoft.Owin.Security.Notifications;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
namespace NetWebAppOIDC2
{
public partial class Startup
{
private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
private static string tenantId = ConfigurationManager.AppSettings["ida:TenantId"];
private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];
private static string authority = aadInstance + tenantId;
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
RedirectUri = "https://localhost:44313",
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = OnAuthenticationFailed
}
// Don't use SystemwebCookieManager class here to override the default CookieManager because that seems to negate the SameSite cookie attribute that's being set.
// CookieManager = new SystemWebCookieManager()
});
}
private Task OnAuthenticationFailed(AuthenticationFailedNotification<OpenIdConnectMessage, OpenIdConnectAuthenticationOptions> context)
{
context.HandleResponse();
context.Response.Redirect("/?errormessage=" + context.Exception.Message);
return Task.FromResult(0);
}
}
}
Ansvarsfriskrivning för information från tredje part
De produkter från andra tillverkare som diskuteras i denna artikel tillverkas oberoende av Microsoft. Produkternas funktion eller tillförlitlighet kan därför inte garanteras.
Kontakta oss för att få hjälp
Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.