Meine Firma hat eine API geschrieben, um unsere Anwendungsdaten unseren Kunden zugänglich zu machen. Wir haben die Endpunkte fertiggestellt und möchten nun die API sichern. Die API wird nur von vorab genehmigten Clients verwendet, sodass kein anonymer Zugriff erforderlich ist. Mir wurde gesagt, dass wir ein x.509-Zertifikat verwenden können, das wir generieren, um jeden Client zu identifizieren und zu authentifizieren. Mit der Kennzeichnung meine ich, dass ein Client-Code in das Zertifikat eingebettet wird, das wir an jeden Client senden (ist das überhaupt möglich?). Wie Sie wahrscheinlich sagen, ich habe wenig Erfahrung bei der Authentifizierung von Kunden mit Zertifikaten, ist dies ein solider Ansatz?Client-Authentifizierung für WebAPI 2
Antwort
Dies ist eine sehr "trickreiche" Möglichkeit zur Authentifizierung und Autorisierung von Clients. Es ist sehr leistungsfähig, aber könnte sehr teuer zu implementieren sein, weil Sie eine volle PKI (öffentliche Schlüsselinfrastruktur) verwalten müssen und Sie sicher die Zertifikate an Ihre Kunden verteilen müssen.
1) Sie müssen SSL vorhanden und Sie müssen es erzwingen (auch global, wenn Sie wollen):
public class RequireHttpsAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
{
ReasonPhrase = "HTTPS Required"
};
}
else
{
base.OnAuthorization(actionContext);
}
}
}
public class ValuesController : ApiController
{
[RequireHttps]
public HttpResponseMessage Get() { ... }
}
2) Sie müssen IIS konfigurieren Client-Zertifikate througt der application.host Config zu akzeptieren oder mit der IIS-Manager-Konsole:
<system.webServer>
<security>
<access sslFlags="Ssl, SslNegotiateCert" />
<!-- To require a client cert: -->
<!-- <access sslFlags="Ssl, SslRequireCert" /> -->
</security>
</system.webServer>
3) auf der Serverseite können Sie das Client-Zertifikat erhalten, indem GetClientCertificate auf die Anforderungsnachricht aufrufen. Die Methode gibt null zurück, wenn kein Clientzertifikat vorhanden ist. Andernfalls wird eine X509Certificate2-Instanz zurückgegeben. Verwenden Sie dieses Objekt, um Informationen aus dem Zertifikat abzurufen, z. B. den Aussteller und den Betreff. Dann können Sie diese Informationen für die Authentifizierung und/oder Autorisierung verwenden.
X509Certificate2 cert = Request.GetClientCertificate();
string issuer = cert.Issuer;
string subject = cert.Subject;
Überprüfen dieser Artikel von Mike Watson für volle reference (Ich habe Ihnen einen Auszug hier).
ist dies ein solider Ansatz?
Ja ist es, aber wie Sie gesehen haben, wie der PKI-Nachteil im Auge behalten. Schließlich können Sie OAuth2 Auth implementieren, das auch extrem leistungsfähig ist und Sie können es einfach auf einem externen Provider, zum Beispiel Azure AD, basieren. Überprüfen Sie this Artikel für weitere Details. BTW, Sie können auch von der grundlegenden MVC/API-Vorlage starten.
- 1. WebApi 2 Rückgabetypen
- 2. Set WebApi 2 Routen
- 3. OData WebApi 2 Fehlerbehandlung
- 4. WebAPI 2 Attribut Routing
- 5. ASP.NET WebAPI 2 Nested JSON
- 6. WebAPI 2 Attribut Routing-Sitzungsstatus
- 7. WebApi 2 Maximale Anforderungslänge überschritten
- 8. Was sind die Unterschiede zwischen WebAPI und WebAPI 2
- 9. Laravel 5: Socket.io-Clientauthentifizierung mit Laravel-Sitzungsdaten
- 10. ASP.NET MVC 5 und WebApi 2 Authentifizierung
- 11. Microsoft Edge vs EnableCors (WebAPI 2)
- 12. WebAPI 2 + OData v4 komplettes Beispiel
- 13. Abrufen von Kopfzeilenwerten in WebApi 2 Controller
- 14. CORS mit WebAPI für XmlHttpRequest
- 15. WebAPI-Hilfeseiten: für Produktionsversion deaktivieren
- 16. URL Referrer ist nicht verfügbar in WebApi 2 MVC Projekt
- 17. Gibt es ResponseCacheAttribute für WebAPI Core?
- 18. WebAPI: Min/Max-Doppel für RouteAttribute
- 19. So geben Sie akzeptierte Zertifikate für die Clientauthentifizierung in .NET an SslStream
- 20. Upload von Dateien mit flow.js + ng-flow zu WebAPI 2
- 21. WebApi & Odata - geeignet für die Dateiverwaltung?
- 22. Bearer Token JSON Ergebnis in ASP.NET WebApi 2
- 23. Verwenden Sie WebAPI 2 ohne OWIN Authentifizierung Middleware
- 24. Verwenden von Url.Link mit Attributrouting in Webapi 2
- 25. ASP.NET WebApi OData-Unterstützung für DTOs
- 26. DelegierenHandler für die Antwort in WebApi
- 27. Konfigurieren Anfrage Timeout für WebAPI Controller
- 28. Request Header extrahieren falsche Daten für Webapi
- 29. Wie konfiguriere ich Autofac? Für Webapi
- 30. Standard-Medienformatierer für eine WebAPI-Aktion festlegen
Dank Luca, dieser Link zu Mike Watson Artikel war genau das, was ich brauchte. Wir werden unsere eigenen Zertifikate ausstellen, da wir eine begrenzte Gruppe von Clients haben, die die API verwenden werden, so dass der Aufwand für die Sperrung und das Ausstellen neuer Clientzertifikate überschaubar sein sollte. –