2015-01-15 9 views
10

Ich verwende Cookie-Authentifizierung mit OWIN in einem .NET MVC 4.5-Setup. Ich habe die Cookie-Authentifizierungskonfiguration in Startup.Auth.cs (Code unten) eingerichtet und möchte auf den LoginPath zugreifen, den ich in CookieAuthenticationOptions in einem Controller festgelegt habe. Wenn sich mein LoginPath aus irgendeinem Grund ändert, muss ich nur ändern es an einem Ort. Suchen Sie also nach etwas wie Zugriff konfiguriert CookieAuthenticationOptions.LoginPath außerhalb von Startup.Auth.cs

context.GetCookieAuthenticationOptions().LoginPath
Gibt es eine Möglichkeit, auf die CookieAuthenticationOptions außerhalb von Startup.Auth.cs zuzugreifen, oder ist meine einzige Option hier, etwas wie das Hinzufügen einer appSetting in Web.config zu tun und diese stattdessen zu verwenden?

Startup.Auth.cs Code, ich möchte auf LoginPath außerhalb dieser Datei zugreifen.

 app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      LoginPath = new PathString("Login"), 
      SlidingExpiration = true, 
      ExpireTimeSpan = _expirationTimeSpan, 
      Provider = new CookieAuthenticationProvider 
      { 
       // Enables the application to validate the security stamp when the user logs in. 
       // This is a security feature which is used when you change a password or add an external login to your account. 
       OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromMinutes(30), 
        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager, DefaultAuthenticationTypes.ApplicationCookie)) 
      }, 

     }); 
+0

Ich bin auch daran interessiert, wie Sie dies in .NET Core tun, wenn es sich geändert hat. Ich habe das Kopfgeld hinzugefügt, um das herauszufinden. –

+1

@ScottChamberlain warum haben Sie nicht einfach den Pfad als eine Option, die an den Startup übergeben/injiziert wird, die auch extern über die gleiche Klasse/Service zugänglich ist. Oder vereinfache ich mein Verständnis davon, auf was Sie zugreifen möchten. – Nkosi

+1

@ScottChamberlain das oder die 'CookieAuthenticationOptions' in einer Factory eingebettet haben, die Ihnen Zugriff auf die Instanz gewährt, die an die Middleware übergeben wurde. – Nkosi

Antwort

2

Es gibt keine direkte Möglichkeit, dies zu tun. Wenn Sie genau hinsehen, wird das Cookie-Optionen-Objekt in der AppBuilder Klasse private _middleware Sammlung gespeichert. Es gibt keine Möglichkeit, auf diese Eigenschaft zuzugreifen (außer Reflektion).

Sie jedoch die cookieOptions speichern Objekt im Owin Kontext:

var cookieOptions = new CookieAuthenticationOptions 
{ 
    // ... 
    LoginPath = new PathString("/Account/Login"), 
    // ... 
}; 

app.UseCookieAuthentication(cookieOptions); 
app.CreatePerOwinContext(() => new MyCookieAuthOptions(cookieOptions)); 

In der Steuerung Sie dann es wie folgt zugreifen können:

var cookieOptions = HttpContext.GetOwinContext().Get<MyCookieAuthOptions>().Options; 

Owin Kontext unterstützt nur IDisposable Objekt, wir daher müssen CookieAuthenticationOptions in einem IDisposable Objekt wickeln:

public class MyCookieAuthOptions : IDisposable 
{ 
    public MyCookieAuthOptions(CookieAuthenticationOptions cookieOptions) 
    { 
     Options = cookieOptions; 
    } 

    public CookieAuthenticationOptions Options { get; } 

    public void Dispose() 
    { 

    } 
} 
Verwandte Themen