ASP.NET Identitätsansprüche

8

Ich habe ein Problem, die Ansprüche zu verstehen, besonders Rollen.

Im Folgenden werden mir zwei Rollen zugewiesen, die dem Benutzer zugewiesen sind

%Vor%

Aber wenn ich die Ansprüche bekomme und es durchspiele, bekomme ich nur die erste Rolle. Ich bekomme nicht beide Rollen. Bitte beachten Sie, dass ich zum Zeitpunkt der Anmeldung keine Rollen in den Ansprüchen eingerichtet habe.

Aktionscode

%Vor%

und der entsprechende View-Code

%Vor%

und hier ist der Ausgang. Was fehlt mir hier?

Und die Tabelle hat die zwei Rollen

Update # 1

Ich habe Vornamen und Nachnamen als Remote-Ansprüche hinzugefügt, angemeldet und beide Rollen werden jetzt angezeigt. Ich habe nichts geändert. So, jetzt bin ich mehr verwirrt ...

Hier ist der Anbieter zum Hinzufügen von Remote-Ansprüchen

%Vor%

und die Login-Aktion zur Verwendung des Anspruchsanbieters

%Vor%     
learning... 27.11.2015, 02:02
quelle

1 Antwort

1

Es ist schwer zu sagen, aber ich denke, was hier passiert ist, dass Ansprüche in dem Cookie zwischengespeichert wurden, der zur Authentifizierung des Benutzers verwendet wird. Wenn sich ein Benutzer zum ersten Mal anmeldet, werden die Ansprüche aus der Datenbank gelesen, ein Cookie wird mit den Ansprüchen erstellt und im Browser des Benutzers gespeichert. Alle weiteren Anfragen lesen die Benutzerinformationen vom Cookie bis zum Ablaufdatum. Ich habe einen ausführlichen Blogpost über Ich schrieb eine Weile zurück auf ASP.NET Identität Cookie Ablauf Weitere Informationen zur Ablaufverwaltung

Einige Ihrer Formulierungen suggerieren (nur eine Vermutung meinerseits), dass die Rollen hinzugefügt wurden, nachdem der Benutzer sich bereits angemeldet hatte und daher die Rollen dem Cookie nicht hinzugefügt wurden und nicht ausgedruckt wurden. Die Ansprüche wurden aktualisiert, als Sie den Code hinzugefügt haben, um die Namen hinzuzufügen, weil einer der wenigen Gründe:

  1. Der Cookie war abgelaufen und Sie mussten sich neu anmelden.
  2. Sie haben sich abgemeldet (wodurch der Cookie entfernt wurde) und dann eine neue Anmeldung vorgenommen.
  3. Sie waren zwar eingeloggt, aber wenn Sie die Aktion login erneut posten, rufen Sie signout und dann signin auf, wodurch der Cookie aktualisiert wurde:

    AuthenticationManager.SignOut(); AuthenticationManager.SignIn(new AuthenticationProperties

Sie können das Verhalten kopieren, in dem Sie gerade sind:

  1. Stellen Sie sicher, dass der Benutzer abgemeldet ist
  2. Entfernen Sie die Rollen des Benutzers aus der Tabelle AspNetUserRoles
  3. Unterschreiben Sie den Benutzer in
  4. Fügen Sie die Rollen dem Benutzer in der Tabelle AspNetUserRoles hinzu (entweder manuell oder durch eine Aktion über Ihre Anwendung, in der Sie Rollen für Benutzer verwalten)
  5. Drucken Sie die Rollen
  6. aus
  7. Sie werden die Rollen im Ausdruck nicht sehen.
  8. Als nächstes unterschreiben Sie den Benutzer und signieren ihn wieder und Sie sehen dann die erwarteten Rollen.

Jedes Mal, wenn Sie eine Rolle oder einen Anspruch hinzufügen, müssen Sie sich vom Benutzer manuell abmelden oder Sie können einen Anruf tätigen, der den Cookie wie bereits erwähnt aktualisiert. Diese Antwort hier gibt einen Überblick darüber, wie der Cookie effektiv aktualisiert wird.

    
jsturtevant 18.02.2016 19:21
quelle