cherrypy.lib.auth_摘要模块

HTTP摘要身份验证工具。

HTTP摘要访问身份验证的服务器端实现,如 RFC 2617 .

示例用法,使用内置的get-ha1-dict-plain函数,该函数使用明文密码的dict作为凭证存储:

userpassdict = {'alice' : '4x5istwelve'}
get_ha1 = cherrypy.lib.auth_digest.get_ha1_dict_plain(userpassdict)
digest_auth = {'tools.auth_digest.on': True,
               'tools.auth_digest.realm': 'wonderland',
               'tools.auth_digest.get_ha1': get_ha1,
               'tools.auth_digest.key': 'a565c27146791cfb',
               'tools.auth_digest.accept_charset': 'UTF-8',
}
app_config = { '/' : digest_auth }
cherrypy.lib.auth_digest.H(s)[源代码]

哈希函数h

class cherrypy.lib.auth_digest.HttpDigestAuthorization(auth_header, http_method, debug=False, accept_charset='UTF-8')[源代码]

基类:object

解析摘要授权头并重新计算摘要。

HA2(entity_body='')[源代码]

返回H(A2)字符串。参见 RFC 2617 第3.2.2.3节。

errmsg(s)[源代码]
is_nonce_stale(max_age_seconds=600)[源代码]

如果已验证的nonce已过时,则返回true。nonce包含纯文本形式的时间戳和时间戳的安全散列。您应该首先验证nonce以确保纯文本时间戳没有被欺骗。

classmethod matches(header)[源代码]
request_digest(ha1, entity_body='')[源代码]

计算请求摘要。参见 RFC 2617 第3.2.2.1节。

哈1

从凭据存储中获取的HA1字符串。

entity_body

如果“qop”设置为“auth int”,则a2包含“实体体”的哈希。实体主体是消息的一部分,位于HTTP头之后。参见 RFC 2617 第4.3条。这是指用户代理在具有授权头的请求中发送的实体。通常,GET请求没有实体,POST请求有实体。

scheme = 'digest'
validate_nonce(s, key)[源代码]

验证当前状态。如果nonce是由synthesis_nonce()生成的,并且时间戳没有被欺骗,则返回true,否则返回false。

S

与资源相关的字符串,例如服务器的主机名。

钥匙

只有服务器知道的秘密字符串。

s和key必须是相同的值,用于合成我们试图验证的nonce。

cherrypy.lib.auth_digest.TRACE(msg)[源代码]
cherrypy.lib.auth_digest._get_charset_declaration(charset)[源代码]
cherrypy.lib.auth_digest._respond_401(realm, key, accept_charset, debug, **kwargs)[源代码]

使用401状态和WWW-Authenticate报头进行响应

cherrypy.lib.auth_digest._try_decode_header(header, charset)[源代码]
cherrypy.lib.auth_digest.digest_auth(realm, get_ha1, key, debug=False, accept_charset='utf-8')[源代码]

一个cherrypy工具,钩住before处理程序以执行HTTP摘要访问身份验证,如中所指定 RFC 2617 .

如果请求具有带有“摘要”方案的“授权”头,则此工具将对该头中提供的凭据进行身份验证。如果请求没有“authorization”头,或者请求没有“authorization”头,或者请求没有“digest”,或者如果验证失败,那么该工具将发送一个401响应,其中包含“www authenticate”摘要头。

领域

包含身份验证领域的字符串。

get_ha1

在凭证存储中查找用户名并返回HA1字符串的可调用文件,该字符串在RFC中定义为MD5(用户名:领域:密码)。函数的签名是: get_ha1(realm, username) 从请求的“授权”头中获取用户名。如果在凭据存储中找不到用户名,get_ha1()将返回none。

钥匙

一种只为服务器所知的秘密字符串,用于合成nonce。

cherrypy.lib.auth_digest.get_ha1_dict(user_ha1_dict)[源代码]

返回一个get_ha1函数,该函数从格式为:username:ha1的字典中获取ha1密码哈希。

如果需要基于字典的身份验证方案,但使用预先计算的ha1哈希而不是纯文本密码,请使用get_ha1_dict(my_userha1_dict)作为get_ha1参数的值来摘要_auth()。

cherrypy.lib.auth_digest.get_ha1_dict_plain(user_password_dict)[源代码]

返回一个get_ha1函数,该函数从格式为:用户名:密码的字典中获取纯文本密码。

如果您想要一个简单的基于字典的认证方案,使用纯文本密码,使用get_Ha1_dict_Plain(my_userpass_dict)作为get_Ha1参数的值来消化_auth()。

cherrypy.lib.auth_digest.get_ha1_file_htdigest(filename)[源代码]

返回一个get_ha1函数,该函数从一个平面文件中获取ha1密码哈希,该平面文件的行格式与apache htdigest实用程序生成的行格式相同。例如,对于领域“wonderland”、用户名“alice”和密码“4x5istwelve”,htdigest行为:

alice:wonderland:3238cdfe91a8b2ed8e39646921a02d4c

如果要使用apache htdigest文件作为凭据存储,请使用get_Ha1_file_htdigest(my_htdigest_file)作为get_Ha1参数digest_auth()的值。建议文件名参数是绝对路径,以避免出现问题。

cherrypy.lib.auth_digest.md5_hex(s)[源代码]
cherrypy.lib.auth_digest.synthesize_nonce(s, key, timestamp=None)[源代码]

合成一个抗欺骗的nonce值,可以检查其是否过时。返回一个字符串,该字符串适用于www-authenticate头中“nonce”的值。

S

与资源相关的字符串,例如服务器的主机名。

钥匙

只有服务器知道的秘密字符串。

时间戳

自epoch时间戳以来的整数秒

cherrypy.lib.auth_digest.www_authenticate(realm, key, algorithm='MD5', nonce=None, qop='auth', stale=False, accept_charset='UTF-8')[源代码]

构造用于摘要式身份验证的WWW身份验证头。