header 中的 Cherrypy 基本授权 -

Cherrypy Basic Authorization in header -

我查看了 http://cherrypy.readthedocs.io/en/latest/basics.html#authentication 上的文档,以了解如何将我的 API 调用发送到 Cherrypy 并验证我将在 header 我将从我的客户端程序发送的 HTTP 请求。 header 将遵循具有以下示例键和值的 header 的基本授权 示例:授权:基本 YWxhZGRpbjpvcGVuc2VzYW1l

然后我想要仅在某些授权完成后才写入 运行 的 Cherrypy 函数。 从客户端,我会这样调用我的函数: https:///myfunction?param1=value¶m2=value¶m3=value 基本授权 header 如上所示设置

在 Cherrypy 中,我将编写如下函数代码:

 @cherrypy.expose
    def myfunction(self, param1=1,param2=cat,param3=dog):
            # do my work in the function 
        return 

注意:该函数不会让用户输入任何凭据。该调用将以编程方式 pre-populate 基本授权 header。

你能否以这种方式设置 Cherrypy 代码示例,以明确地向我展示如何实现这一目标。假设是 Cherrypy 的初学者(例如只完成了前 5 个左右的教程(http://docs.cherrypy.org/en/latest/tutorials.html#tutorials))。 非常感谢。

import cherrypy

def check_auth():
  needs_auth = cherrypy.request.config.get('auth.require', False)

  if needs_auth and not cherrypy.request.headers.get('X-HTTP-APIKEY', None) =="1234":
     raise cherrypy.HTTPError(401)



cherrypy.tools.auth = cherrypy.Tool('before_handler', check_auth, priority=50)


def needsauth():
    '''A decorator that sets auth.require config
    variable.'''

    def decorate(f):
        if not hasattr(f, '_cp_config'):
            f._cp_config = dict()
        if 'auth.require' not in f._cp_config:
            f._cp_config['auth.require'] = []
        f._cp_config['auth.require'] = True
        return f

    return decorate


class main(object):
    _cp_config = {'tools.auth.on': True,}
    @cherrypy.expose
    @needsauth()
    def myfunction(self):
        print 1
        return '<html>Hi</html>'

cherrypy.quickstart(main())