2016-08-08 4 views
0

Ich versuche, auf Benutzeransprüche zuzugreifen, die von der ADFS-Anmeldung zurückkommen. ADFS gibt den Benutzernamen zurück und mit diesem Benutzernamen muss ich eine Abfrage an eine andere Datenbank ausführen, um Benutzerinformationen zu erhalten und sie zu speichern. Ich weiß nicht, wo ich das machen soll und was die beste Praxis ist. Ich kann wie Benutzer Ansprüche im View-Controller zugreifen:Holen Sie sich Benutzeransprüche, bevor eine Seite beim externen ADFS-Login geladen wird

public ActionResult Index() 
{ 
    var ctx = Request.GetOwinContext(); 
    ClaimsPrincipal user = ctx.Authentication.User; 
    IEnumerable<Claim> claims = user.Claims; 
    return View(); 
} 

Aber was muss ich tun, ist, wie ich Zugriff auf den Behauptungen wie in global.asax.cs oder startup.cs bevor die Anwendung ausgeführt Benutzerinformationen zu speichern.

Das ist mein Startup.Auth.cs Datei:

public partial class Startup 
{ 
    private static string realm = ConfigurationManager.AppSettings["ida:Wtrealm"]; 
    private static string adfsMetadata = ConfigurationManager.AppSettings["ida:ADFSMetadata"]; 

    public void ConfigureAuth(IAppBuilder app) 
    { 
     app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType); 

     app.UseCookieAuthentication(
      new CookieAuthenticationOptions 
      { 
       AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType 
      }); 

     app.UseWsFederationAuthentication(
      new WsFederationAuthenticationOptions 
      { 
       Wtrealm = realm, 
       MetadataAddress = adfsMetadata 
      }); 
    } 
} 

Antwort

1

Wir fügen einen Event-Handler an den WsFederationAuthenticationOptions Wert in unserer Startup-Datei.

Dies geschieht unmittelbar nachdem das Sicherheitstoken validiert wurde.

app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions() 
{ 
    MetadataAddress = MetadataAddress, 

    Wtrealm = Wtrealm, 
    Wreply = CallbackPath, 
    Notifications = new WsFederationAuthenticationNotifications() 
    { 
     SecurityTokenValidated = (ctx) => 
     { 
      ClaimsIdentity identity = ctx.AuthenticationTicket.Identity; 
      DoSomethingWithLoggedInUser(identity); 
     } 
    } 
}; 
+0

Es funktioniert irgendwie, um Benutzerinformationen dort zu erhalten, aber jetzt habe ich ein anderes Problem. Die Authentifizierung scheint lebenslang zu sein, und wo immer ich versuche, eine Verbindung zum Server herzustellen, denkt sie, dass ich trotzdem angemeldet bin und nicht zur ADFS-Autorisierung weiterleite. Ich frage mich, ob ich CookieAuthenticationDefaults auf WsFederationAuthenticationDefaults ändern sollte, um es zu lösen oder irgendeine Idee, was in meinem Code falsch sein kann? – elly

+0

Sorry, mein Schlechter, hatte etwas falsch mit dem Build. Wie auch immer, das hat es gelöst! Vielen Dank. – elly

Verwandte Themen