Das hat mich ein paar Mal gebissen. Je nachdem, wo/wie Sie Ihre Authentifizierung durchführen, müssen Sie vorsichtig sein, wo Sie auf Ihre Identität zugreifen, insbesondere in Controller-Konstruktoren.
Zum Beispiel, während der Steuerung Aktion nach einem IAuthenticationFilter
aufgerufen wird, instanziiert wird, wird der Konstruktor ControllervorAuthenticateAsync
genannt wird; Das bedeutet, dass jede Authentifizierung, die Sie in AuthenticateAsync
vornehmen, nicht im Konstruktor Ihres Controllers verfügbar ist (wie in Ihrem Beispiel).
Normalerweise verlasse ich mich nicht auf Dinge, die während der Controller-Konstruktion verfügbar sind (außer wenn sie von DI bearbeitet werden). Greifen Sie stattdessen auf die Identität zu, wie Sie sie in Ihren Controller-Aktionen benötigen. Wenn Sie versuchen, die Identitätssuche einfacher zu machen (dh, ziehen Sie Ihr Benutzerobjekt basierend auf der Eigenschaft User.Identity.Name
), erstellen Sie eine Basis-Controller-Klasse mit einer Eigenschaft oder Methode, die dies für Sie übernimmt. Lassen Sie dann Ihre Controller davon erben ...
public User AuthenticatedUser
{
get
{
if (User.Identity.IsAuthenticated)
{
return usersManager.GetByEmail(User.Identity.Name);
}
return null;
}
}
EDIT
Siehe here für eine detaillierte Aufschlüsselung der Web.API Lebenszyklus-Controller Schaffung zeigt, die auftritt, bevor die Authentifizierung.
Controller-Erstellung ist nicht die neueste Stufe; Controller werden vor den Filtern erstellt, und nach – Aleks
wird auf die Controller * -Methode zugegriffen. Ja, Sie haben Recht. Der Filter ist jedoch eine zusätzliche Anforderungs-Pipeline, die nicht mit der ASP.NET-Pipeline in Beziehung steht. Auch nach dem Erstellungs-Controller können Sie Logik in Ihrer Aktionsmethode hinzufügen, die Anfrage validieren und so weiter ... –
Die Frage war "ist es eine gute Idee" und die Antwort lautet nein. Das OP sagt nicht, * wie * die Authentifizierung durchgeführt wird. Unabhängig davon, ob es vom Host oder von einem Filter ausgeführt wird, wird auf die Identität weiterhin auf die gleiche Weise zugegriffen. Das bedeutet, wenn Sie sich entscheiden, die Authentifizierungsmechanismen irgendwann zu ändern, werden Sie Ihre Controller auf seltsame und wunderbare Weise zerbrechen. – Aleks