Fjärrautentisering
System.Web-adaptrarnas fjärrautentiseringsfunktion gör det möjligt för en ASP.NET Core-app att fastställa en användares identitet (autentisera en HTTP-begäran) genom att delegar till en ASP.NET-app. När du aktiverar funktionen läggs en slutpunkt till i ASP.NET-appen som returnerar en serialiserad ClaimsPrincipal som representerar den autentiserade användaren för alla begäranden som görs till slutpunkten. ASP.NET Core-appen registrerar sedan en anpassad autentiseringshanterare som (för slutpunkter med fjärrautentisering aktiverat) fastställer en användares identitet genom att anropa den slutpunkten på ASP.NET-appen och skicka valda huvuden och cookies från den ursprungliga begäran som togs emot av ASP.NET Core-appen.
Konfiguration
Det finns bara några små kodändringar som krävs för att aktivera fjärrautentisering i en lösning som redan har konfigurerats enligt Komma igång.
Följ först anvisningarna för fjärrappkonfiguration för att ansluta ASP.NET Core- och ASP.NET-apparna. Sedan finns det bara några extra tilläggsmetoder att anropa för att aktivera fjärrappautentisering.
ASP.NET-applikationskonfiguration
Den ASP.NET appen måste konfigureras för att lägga till autentiseringsslutpunkten. Att lägga till autentiseringsslutpunkten görs genom att anropa metoden AddAuthenticationServer
tillägg för att konfigurera HTTP-modulen som bevakar begäranden till autentiseringsslutpunkten. Observera att fjärrautentiseringsscenarier vanligtvis också vill lägga till proxystöd, så att alla autentiseringsrelaterade omdirigeringar dirigeras korrekt till ASP.NET Core-appen i stället för ASP.NET en.
SystemWebAdapterConfiguration.AddSystemWebAdapters(this)
.AddProxySupport(options => options.UseForwardedHeaders = true)
.AddRemoteAppServer(options =>
{
options.ApiKey = ConfigurationManager.AppSettings["RemoteAppApiKey"];
})
.AddAuthenticationServer();
ASP.NET Core-appkonfiguration
Därefter måste ASP.NET Core-appen konfigureras för att aktivera autentiseringshanteraren som autentiserar användare genom att göra en HTTP-begäran till ASP.NET-appen. Detta görs igen genom att anropa AddAuthenticationClient
vid registrering av System.Web-anpassares tjänster:
builder.Services.AddSystemWebAdapters()
.AddRemoteAppClient(options =>
{
options.RemoteAppUrl = new Uri(builder.Configuration
["ReverseProxy:Clusters:fallbackCluster:Destinations:fallbackApp:Address"]);
options.ApiKey = builder.Configuration["RemoteAppApiKey"];
})
.AddAuthenticationClient(true);
Det booleska som skickas till AddAuthenticationClient
-anropet anger om fjärrappautentisering ska vara standardautentiseringsschemat. Om true
skickas kommer användaren att autentiseras via fjärrappautentisering för alla begäranden, medan överföring av false
innebär att användaren endast autentiseras med fjärrappautentisering om fjärrappsschemat begärs specifikt (med [Authorize(AuthenticationSchemes = RemoteAppAuthenticationDefaults.AuthenticationScheme)]
på en styrenhet eller åtgärdsmetod, till exempel). Att skicka falskt för den här parametern har fördelen att endast göra HTTP-begäranden till den ursprungliga ASP.NET-appen för autentisering för slutpunkter som kräver fjärrappautentisering, men som har nackdelen att behöva kommentera alla sådana slutpunkter för att indikera att de kommer att använda fjärrappautentisering.
Förutom det nödvändiga booleska värdet kan en valfri callback-funktion skickas till AddAuthenticationClient
för att ändra andra aspekter av fjärrautentiseringsprocessens beteende.
-
RequestHeadersToForward
: Den här egenskapen innehåller rubriker som ska vidarebefordras från en begäran när du anropar api:et för autentisering. Som standard är de enda vidarebefordrade rubrikernaAuthorization
ochCookie
. Ytterligare rubriker kan vidarebefordras genom att lägga till dem i den här listan. Om listan rensas (så att inga rubriker anges) vidarebefordras alla rubriker. -
ResponseHeadersToForward
: Den här egenskapen listar svarshuvuden som ska spridas tillbaka från autentiseringsbegäran till det ursprungliga anropet som föranledde autentisering i scenarier där identiteten utmanas. Som standard omfattar dettaLocation
,Set-Cookie
ochWWW-Authenticate
rubriker. -
AuthenticationEndpointPath
: Slutpunkten i ASP.NET-appen där autentisering av förfrågningar ska göras. Detta är som standard/systemweb-adapters/authenticate
och måste matcha slutpunkten som anges i ASP.NET autentiseringsslutpunktskonfiguration.
Om ASP.NET Core-appen inte tidigare innehöll mellanprogram för autentisering måste det aktiveras (efter routning av mellanprogram, men innan mellanprogram för auktorisering):
app.UseAuthentication();
Formgivning
- När begäranden bearbetas av ASP.NET Core-appen, om fjärrappautentisering är standardschemat eller anges av begärans slutpunkt, försöker
RemoteAuthenticationAuthHandler
autentisera användaren.- Hanteraren skickar en HTTP-begäran till ASP.NET appens autentiserande slutpunkt. Den kopierar konfigurerade huvuden från den aktuella begäran till den nya för att vidarebefordra autentiseringsrelevanerande data. Som nämnts ovan är standardbeteendet att kopiera
Authorize
- ochCookie
-rubrikerna. API-nyckelrubriken läggs också till i säkerhetssyfte.
- Hanteraren skickar en HTTP-begäran till ASP.NET appens autentiserande slutpunkt. Den kopierar konfigurerade huvuden från den aktuella begäran till den nya för att vidarebefordra autentiseringsrelevanerande data. Som nämnts ovan är standardbeteendet att kopiera
- Den ASP.NET appen hanterar begäranden som skickas till autentiseringsslutpunkten. Så länge API-nycklarna matchar kommer ASP.NET-appen antingen att returnera den aktuella användarens ClaimsPrincipal serialiserade i svarsmeddelandet, eller returnera en HTTP-statuskod (till exempel 401 eller 302) tillsammans med svarshuvuden som indikerar ett fel.
- När ASP.NET Core-appens
RemoteAuthenticationAuthHandler
tar emot svaret från ASP.NET-appen:- Om en ClaimsPrincipal returnerades lyckosamt, kommer autentiseringshanteraren att deserialisera den och använda den som den aktuella användarens identitet.
- Om en ClaimsPrincipal inte returnerades lagrar hanteraren resultatet och om autentiseringen utmanas (eftersom användaren till exempel har åtkomst till en skyddad resurs) uppdateras begärans svar med statuskoden och valda svarshuvuden från svaret från autentiseringsslutpunkten. Detta gör att utmaningssvar (till exempel omdirigeringar till en inloggningssida) kan spridas till slutanvändare.
- Eftersom resultatet från ASP.NET appens autentiserade slutpunkt kan innehålla data som är specifika för den slutpunkten, kan användarna registrera
IRemoteAuthenticationResultProcessor
implementeringar med ASP.NET Core-appen som körs på eventuella autentiseringsresultat innan de används. Till exempel är det inbyggdaIRemoteAuthenticationResultProcessor
, som ärRedirectUrlProcessor
, som letar efterLocation
-svarshuvuden som returneras från autentiseringsslutpunkten och säkerställer att omdirigeringen går tillbaka till värden för ASP.NET Core-appen och inte direkt till ASP.NET-appen.
- Eftersom resultatet från ASP.NET appens autentiserade slutpunkt kan innehålla data som är specifika för den slutpunkten, kan användarna registrera
Kända begränsningar
Den här fjärrautentiseringsmetoden har några kända begränsningar:
- Eftersom Windows-autentisering är beroende av ett handtag för en Windows-identitet stöds inte Windows-autentisering av den här funktionen. Framtida arbete planeras för att utforska hur delad Windows-autentisering kan fungera. Mer information finns under dotnet/systemweb-adapters#246.
- Med den här funktionen kan ASP.NET Core-appen använda en identitet som autentiseras av ASP.NET-appen, men alla åtgärder som är relaterade till användare (inloggning, loggning osv.) måste fortfarande dirigeras via ASP.NET-appen.
Alternativ
Om autentiseringen i ASP.NET-appen görs med hjälp av Microsoft.Owin
Cookie Authentication Middleware, är en alternativ lösning för att dela identitet att konfigurera ASP.NET- och ASP.NET Core-appar så att de kan dela en autentisering cookie. Delning av en autentisering cookie möjliggör:
- Båda apparna för att fastställa användaridentiteten från samma cookie.
- När du loggar in eller ut från en app loggas användaren in eller ut ur den andra appen.
Observera att eftersom inloggning vanligtvis beror på en specifik databas fungerar inte alla autentiseringsfunktioner i båda apparna:
- Användare bör bara logga in via en av apparna, antingen ASP.NET eller ASP.NET Core-appen, beroende på vilken databas som ska användas.
- Båda apparna kan se användarnas identitet och anspråk.
- Båda apparna kan logga ut användaren.
Information om hur du konfigurerar delning av autentiseringscookies mellan ASP.NET och ASP.NET Core-appar finns i cookie delningsdokumentation. Följande exempel i System.Web-adaptrar GitHub-repo visar fjärrapp-autentisering med en delad cookie konfiguration som gör att båda apparna kan logga in och ut användare:
Delningsautentisering är ett bra alternativ om båda följande är sanna:
- Appen ASP.NET använder redan
Microsoft.Owin
cookie autentisering. - Det går att uppdatera ASP.NET-appen och ASP.NET Core-appar så att de använder matchande dataskyddsinställningar. Matchande inställningar för delat dataskydd innehåller en delad filsökväg, Redis-cache eller Azure Blob Storage för lagring av dataskyddsnycklar.
I andra scenarier är den fjärrautentiseringsmetod som beskrivs tidigare i det här dokumentet mer flexibel och passar förmodligen bättre.
ASP.NET Core