Twisted-Klein 服务器上的 HTTP 基本身份验证
HTTP Basic Auth on Twisted-Klein server
我正在使用 Twisted-Klein
作为服务器。这是一个简单的例子:
from klein import Klein
app = Klein()
@app.route('/health', methods=['GET'])
def health_check(request):
return ''
@app.route('/query/<path:expression>', methods=['GET'])
def query(request, expression):
return 'Expression: {0}'.format(expression)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
如何将 HTTP 基本身份验证添加到 query
API 端点?使用 Flask,这很简单:http://flask.pocoo.org/snippets/8/
但是我找不到任何关于如何在 Twisted-Klein 服务器上执行此操作的示例。
Twisted 本身有 support for HTTP basic (and digest) authentication,作为资源 wrapper 可以应用于任何其他资源。
您的 klein 示例没有演示它,但 klein 可以(必须,真的)create a resource from your app 为了使用 Twisted 的网络服务器。
您可以像这样组合它们:
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.web.resource import IResource
from twisted.web.guard import HTTPAuthSessionWrapper, BasicCredentialFactory
from klein import Klein
app = Klein()
# ... define your klein app
@implementer(IRealm)
@attr.s
class TrivialRealm(object):
resource = attr.ib()
def requestAvatar(self, avatarId, mind, *interfaces):
# You could have some more complicated logic here, but ...
return succeed((IResource, self.resource, lambda: None))
def resource():
realm = TrivialRealm(resource=app.resource())
portal = Portal(realm, [<some credentials checkers>])
credentialFactory = BasicCredentialFactory(b"http auth realm")
return HTTPAuthSessionWrapper(portal, [credentialFactory])
你可以运行这个根据the klein docs for using twistd web
。
我正在使用 Twisted-Klein
作为服务器。这是一个简单的例子:
from klein import Klein
app = Klein()
@app.route('/health', methods=['GET'])
def health_check(request):
return ''
@app.route('/query/<path:expression>', methods=['GET'])
def query(request, expression):
return 'Expression: {0}'.format(expression)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
如何将 HTTP 基本身份验证添加到 query
API 端点?使用 Flask,这很简单:http://flask.pocoo.org/snippets/8/
但是我找不到任何关于如何在 Twisted-Klein 服务器上执行此操作的示例。
Twisted 本身有 support for HTTP basic (and digest) authentication,作为资源 wrapper 可以应用于任何其他资源。
您的 klein 示例没有演示它,但 klein 可以(必须,真的)create a resource from your app 为了使用 Twisted 的网络服务器。
您可以像这样组合它们:
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.web.resource import IResource
from twisted.web.guard import HTTPAuthSessionWrapper, BasicCredentialFactory
from klein import Klein
app = Klein()
# ... define your klein app
@implementer(IRealm)
@attr.s
class TrivialRealm(object):
resource = attr.ib()
def requestAvatar(self, avatarId, mind, *interfaces):
# You could have some more complicated logic here, but ...
return succeed((IResource, self.resource, lambda: None))
def resource():
realm = TrivialRealm(resource=app.resource())
portal = Portal(realm, [<some credentials checkers>])
credentialFactory = BasicCredentialFactory(b"http auth realm")
return HTTPAuthSessionWrapper(portal, [credentialFactory])
你可以运行这个根据the klein docs for using twistd web
。