Ich benutze Umbraco 7.5 mit einer OWIN-Startup-Klasse.Umbraco Web API - Cookie-Authentifizierung
Trotz der Unzulänglichkeiten bei der Verwendung von Cookie-Authentifizierung versuche ich, die Cookie-Authentifizierung zwischen MVC und Web-API zu teilen.
Ich habe dies in meiner OWIN Startklasse:
private static void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
CookieSecureOption secureCookieOption = CookieSecureOption.SameAsRequest;
#if DEBUG
secureCookieOption = CookieSecureOption.Never;
#endif
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
AuthenticationMode = AuthenticationMode.Active,
LoginPath = new PathString("/Account/Login"),
CookieSecure = secureCookieOption,
CookieManager = new ChunkingCookieManager(),
Provider = new CookieAuthenticationProvider()
}, PipelineStage.Authenticate);
//configure B2C OAuth middleware
foreach (string policy in AppSettings.B2CPolicies)
{
app.UseOpenIdConnectAuthentication(CreateBearerOptionsFromPolicy(policy));
}
// Use a cookie to temporarily store information about a user logging in with a third party login provider
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}
Dies funktioniert gut, so weit wie die Umbraco & benutzerdefinierten MVC Seiten betroffen sind - die aktuelle Benutzeridentität ist verfügbar und die Umbraco Helfer Methoden funktionieren wie erwartet.
Für Web-API-Controller - ob von UmbracoApiController oder nur von ApiController abgeleitet - ist die aktuelle Benutzeridentität im HTTP-Kontext jedoch immer null. Ich habe überprüft, dass die Browseranforderung an die API-Controller gesendet wird, und der ASPNET-Identitätscookie ist enthalten. Daher bin ich verwirrt, warum dies nicht zu einer Benutzeridentität im Thread & httpcontext führt. Wer könnte das beleuchten?
Edit: einige weitere Informationen über this- Ich habe versucht, meine eigene benutzerdefinierte Cookie Authentifizierungs-Middleware zu schaffen und ersetzt die Standard-MS CookieAuthenticationHandler mit meiner benutzerdefinierten Implementierung, so dass ich könnte die Anrufe durch sie verfolgen. Interessanterweise wird für eine normale MVC Seite die AuthenticateCoreAsync-Methode beim Laden der Seite aufgerufen, , die den Cookie erfolgreich liest und ein gültiges Authentifizierungsticket zurückgibt. Für den Web-API-Aufruf wird die AuthenticateCoreAsync-Methode nicht aufgerufen, bevor die API-Methode aufgerufen wird.