KontextSo passen Sie die Validierung von WebApi-OAuth-Token an?
Ich habe eine Arbeits WebApi2 Anwendung, die die aus der Box Inhaber Token-Validierung verwendet, ebenso wie in der ursprünglichen Visual Studio Projektvorlage war.
Ich möchte eine benutzerdefinierte Daten zum generierten Token hinzufügen, dann überprüfen Sie mit diesen benutzerdefinierten Daten, wenn die folgenden API-Aufrufe passieren, was dieses Token präsentiert.
Beispielhaft möchte ich die IP-Adresse des Anrufers speichern, als das Token erstellt wurde, und dann beim Überprüfen des Tokens prüfen, ob der Anruf, der das Token verwendet, die gleiche IP hat.
fand ich die benutzerdefinierte Klasse
public class ApplicationOAuthProvider : OAuthAuthorizationServerProvider
in meinem Projekt, und ich sehe auch, dass OAuthOptions
dass benutzerdefinierte Klasse in Windows Start zu verwenden, konfiguriert ist.
Ich nehme an, wo meine benutzerdefinierten Token-Daten (die ip) hinzuzufügen:
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
hier ich es die Ticket Eigenschaften als benutzerdefinierte Daten hinzufügen kann.
Frage
Allerdings kann ich nicht, in welcher Methode herauszufinden, gegen das Token zu überprüfen, hat diese Daten, und sie paßt auf den IP tatsächlichen Anruf, und wenn nicht, dann betrachtet das Token ungültig?
Verbleibend im IP-Beispiel, ist es für mich nicht klar, wo und wann und wie _adainst_ die gespeicherte IP zu überprüfen, und _reject_ die Anfrage als ungültig? –
@ g.pickardou Nachdem der Benutzer die Berechtigung übergeben hat und Sie seine IP in der Anforderung speichern, können Sie ein eigenes Attribut erstellen (erben ActionFilterAttribute), um eingehende Anforderungen zu überprüfen. Dann können Sie in OnActionExecuting schreiben: – grbulat
'var owinContext = (OwinContext) actionContext.Request.Properties [" MS_OwinContext "]; Zeichenfolge ip = owinContext.Request.RemoteIpAddress; Anspruch userIpClaim = ((ClaimsIdentity) actionContext.ControllerContext.RequestContext.Principal.Identity) .Klaims .FirstOrDefault (c => c.Type == ClaimTypes.NameIdentifier); if (userIpClaim == null \t \t && string.CompareOrdinal (userIpClaim.Value, ip)! = 0) { actionContext.Response = actionContext.Request.CreateResponse (Httpstatuscode.Nicht autorisiert); Rückkehr; } ' – grbulat