Ich habe einfach Twisted-Klein
Server mit HTTP Basic Auth global aktiviert deaktivieren:Wie HTTP Basic Auth für bestimmte API-Endpunkte auf Twisted Klein Server
from klein import Klein
import attr
from zope.interface import implementer
from twisted.cred.portal import IRealm
from twisted.internet.defer import succeed
from twisted.cred.portal import Portal
from twisted.cred.checkers import FilePasswordDB
from twisted.web.resource import IResource
from twisted.web.guard import HTTPAuthSessionWrapper, BasicCredentialFactory
from werkzeug.datastructures import MultiDict
from bson import json_util
import json
app = Klein()
# health check
@app.route('/health', methods=['GET'])
def health_check(request):
return ''
# dataset query API
@app.route('/query/<path:expression>', methods=['GET'])
def query(request, expression):
response = evaluate_expression(expression)
return response
@implementer(IRealm)
@attr.s
class HTTPAuthRealm(object):
resource = attr.ib()
def requestAvatar(self, avatarId, mind, *interfaces):
return succeed((IResource, self.resource, lambda: None))
def resource():
realm = HTTPAuthRealm(resource=app.resource())
portal = Portal(realm, [FilePasswordDB('./configs/server-auth.db')])
credential_factory = BasicCredentialFactory('Authentication required')
return HTTPAuthSessionWrapper(portal, [credential_factory])
Ich möchte deaktivieren Auth nur für bestimmte API-Endpunkte, für Beispiel, in diesem Fall für API-Endpunkt. Ich habe die Dokumentation gelesen, aber ich kann mich nicht darum kümmern.
Danke! Das funktioniert! Wenn ich keinen Pre-Path für meine Authentifizierungs-APIs haben möchte, wie würde ich das tun? Ich habe versucht, etwas wie: 'root.putChild (b '', bewacht) ', aber ich bekomme' 404 keine solche Ressource' Fehler, wenn ich versuche, die APIs abzufragen. –
Es gibt eine Möglichkeit zu tun, was Sie wollen. Sie müssen das Ergebnis von 'requestAvatar' anpassen, anstatt an der Ressourcenhierarchie zu arbeiten, die HTTPAuthSessionWrapper enthält. Ich habe nicht das Gefühl, jetzt ein vollständiges Beispiel zu schreiben, möglicherweise später. –
Ok danke. Ich würde mich freuen, wenn Sie mir ein Beispiel dafür zeigen können. –