2017-09-19 1 views
0

Ich versuche Authentifizierung in meinem MVC-Projekt zu implementieren. Das Problem ist, dass ich ASP.NET Identity OWIN implementiert habe. Ich kann mich erfolgreich authentifizieren und alles sieht gut aus.ASP.NET MVC-Authentifizierung umgewandelt in IIdentity von IdentityUser

Das Problem ist, dass es andere Projekte (wie ein Service Layer), die den authentifizierten Benutzer über System.Threading.Thread.CurrentPrincipal.Identity

In diesem Service-Layer ruft der Wert einer benutzerdefinierten Klasse, wie folgend gegossen wird:

public MyCompanyIdentity Identity 
    { 
     get { return System.Threading.Thread.CurrentPrincipal.Identity as MyCompanyIdentity ; } 
    } 

der Inhalt der MyCompanyIdentity Klasse ist wie folgt:

public class MyCompanyIdentity : IIdentity 
    { 
     public MyCompanyIdentity(); 

     public string EndUserName { get; set; } 
     public string Exception { get; set; } 
     public string Ticket { get; set; } 
     public string Company { get; set; } 
     public string Fullname { get; set; } 
     public string Email { get; set; } 
     public bool IsAuthenticated { get; } 
     public string Name { get; } 
     public string AuthenticationType { get; } 
    } 

In meinem Controller-Klasse habe ich die Authentifizierung als follo w:

var userStore = new UserStore<DemoApplicationUser>(new PeopleSaaIdentityContext()); 
var userManager = new UserManager<DemoApplicationUser>(userStore); 
var user = userManager.Find(username, password); 

if (user != null) 
{ 
    var authManager = HttpContext.Current.GetOwinContext().Authentication; 
    ClaimsIdentity userIdentity = userManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie); 
    authManager.SignIn(new Microsoft.Owin.Security.AuthenticationProperties() { IsPersistent = true }, userIdentity); 
    //How do I cast/convert the System.Threading.Thread.CurrentPrincipal.Identity to a MyCompanyIdentity?            
} 

Da kann ich nicht die MyCompanyIdentity ändern IdentityUser zu implementieren, da ich keinen Zugriff auf den Quellcode haben. Wie kann ich "IIdenityUser? Ich möchte die gleiche Klasse, wie sie buchstäblich überall in der Anwendung verwendet wird, erneut verwenden.

Ich hoffe wirklich, es macht Sinn, sonst lass es mich wissen und ich würde versuchen, weiter zu erklären.

Antwort

0

Es hatte keine andere Wahl als die Logik von Grund auf neu zu schreiben.

Verwandte Themen