2017-02-20 1 views
1

Hier ist meine Auth Configreq.GetApiKey() führt keine Abfrage in DB ServiceStack ApiKeyAuthProvider

Plugins.Add(new AuthFeature(() => new AuthUserSession(), 

        new IAuthProvider[] 
        { 
         new ApiKeyAuthProvider(AppSettings) {RequireSecureConnection = false } 
        }) 
       { 
        IncludeRegistrationService = true, 

       }); 

Globale Filter

GlobalRequestFilters.Add((req, res, requestDto) => 
       { 
        LastApiKey = req.GetApiKey(); 

       }); 

I Api Schlüssel in DB generiert haben und versucht einen Pass zu spielen der Schlüssel durch Postbote oder JsonServiceClient mit Standard-Authentifizierung mit API-Schlüssel in Benutzername der HTTP-Anfrage. Ich habe versucht, Träger-Token in HTTP-Anfrage zu übergeben, aber nicht in der Lage, API-Schlüssel von req.GetApiKey() zu bekommen. Wenn ich den SQL Profiler durchschaue, wird keine Abfrage ausgeführt. Ich bin jedoch in der Lage, IManageApiKeys aufzulösen und seine Methoden auszuführen. Benötige ich ein Attribut in meinem Dienst oder eine zusätzliche Konfiguration in AppHost?

Antwort

2

ServiceStacks API Key Auth Provider funktioniert durch Einrichten einer authentifizierten Benutzersitzung auf der Anforderung für successful API Key Authentication requests. Beim Einrichten der authentifizierten Benutzersitzung wird die API Key that was used to authenticate in IRequest.Items Dictionary gespeichert, was IRequest.GetApiKey() Extension method zurückgibt.

So IRequest.GetApiKey() macht keine DB-Aufrufe, die bereits beim Einrichten der authentifizierten Benutzersitzung bereits getan wurde.

Die Authentifizierung wird durchgeführt, wenn dies erforderlich ist, z. wenn Ihre Dienstleistungen mit einem der Authentifizierung mit Anmerkungen versehen sind Attribute unter:

  • [Authenticate]
  • [RequiredRole]/[RequiresAnyRole]
  • [RequiredPermission]/[RequiresAnyPermission]
+0

Was mir fehlte [Authentifizieren] -Attribut auf api Service anwandte Methode und hat nicht funktioniert. Als ich mich bei der Serviceklasse beworben habe, hat es wie erwartet funktioniert. Danke @mythz. – Anuj

+1

@Anju FYI Das liegt daran, dass das '[Authenticate] '' 'Attribut in der Aktion ausgeführt wird, nachdem die GlobalRequestFilters ausgeführt wurden, aber' base.Request.GetApiKey() 'weiterhin vorhanden ist, wenn der Service ausgeführt wird. – mythz