简化在flask应用程序中使用hmac auth的模块
flask-hmacauth的Python项目详细描述
flask hmacauth
==
`构建状态<;https://travis ci.org/phillipmartin/flask hmacauth>;` a
模块简化了flask中restful api的hmac风格身份验证,
它还构建了简单的rbac概念,并通过时间戳反重放。对于get请求,path部分和所有参数都是散列的。对于post请求,还将添加请求主体。默认情况下,模块希望查询字符串或请求正文中存在通过x-auth-signature进行身份验证的头、帐户id和时间戳参数(包含明显的
值)。timestamp可以
为任何格式datetime。fromTimestamp()可以解析。帐户ID将被
用于通过AccountBroker查找给定帐户的机密和角色。
如果身份验证失败,应用程序将向客户端返回403。但是,所有
都可以更改。
accountbroker的概念用于将此模块与任何实际的用户/角色管理逻辑分离。提供了两个简单的accountbroker
实现。
示例
==
server
----
:
tmgr=dictaccountbroker(
accounts={
"admin":{"secret":;hi^897t7utf,"rights":["create","edit","delete","view"]},
"editor":{"secret":"afstr5afewr","rights":["create","edit","view"]},
"guest":{"secret":"asdfjoiu%i,"rights"用法:["view"]}
}
hmacmgr=hmacmanager(accountmgr,app)
…
@app.route('/api/v1/create')
@hmac_auth("create")
def create_ation():
…
client
----
:
import requests
import time
hashlib
路径和查询="/api/v1/create?timestamp="+str(int(time.time())+"&;account廑id=admin&;foo=bar"
host="https://example.com"
sig=hmac.new(";hi^897t7utf",digestmod=hashlib.sha1,msg=path廑and廑query).hexdigest()
req=requests.get(host+path廑and廑query,headers={'x-auth-signature':sig})
代理
==
身份验证和用户/帐户存储之间的对象。它通过公开
以下方法来实现此目的:
-get \-secret(account \-id)-返回给定帐户
id的字符串机密。如果帐户不存在,则返回none
-has \-u-rights(account \-id,rights)-如果帐户\-id具有列表r中的所有权限,则返回trueights,否则返回false。
如果帐户不存在,则返回false。
-处于活动状态(帐户ID)-如果帐户ID处于活动状态(对于
要为活动定义的任何定义),则返回true,否则返回
false。
flask hmacauth附带两个简单的acccountbroker实现,一个基于dict的accountbroker(dictaccountbroker)和一个静态accountbroker
(staticaccountbroker)。
dictaccountbroker
----
lah",
权限:["right1","right2",…]
}
…
}
它还公开了add\\u accounts和del\\\u accounts方法来动态修改
帐户。
staticaccountbroker
----
用户和角色管理,并设置用于hmac的静态密钥。注意,如果使用该类,则需要将staticaccountbroker.get把account作为account id
参数传递给hmacmanager,或者在查询字符串中为account id提供一个虚拟值
诱因nt通过
数据库。在这种情况下,您的authenticationbroker类只需要执行必要的sql查询来满足上面的方法,就可以了。此对象包含IS\\U authorized
方法,该方法实际上执行HMAC验证和角色检查。
在简单的情况下,您只需向此对象的构造函数传递
Flask应用程序对象和AccountBroker对象。在更复杂的
情况下,如果要更改默认值,可以使用以下
选项:
-app-这是烧瓶应用程序容器
-account\u broker-这是applicationbroker对象
-account\u id-这是可调用的,当馈送请求对象时我将返回请求的帐户ID。其默认值为
lambda x:x.value s.get('account\\u id')
-signature-这是可调用的,当馈送请求对象时,它将
返回请求的签名。默认值为
get \-signature=lambda x:x.headers.get('x-auth-signature')。
-timestamp-这是一个可调用的,当馈送请求对象时,它将
返回请求的时间戳。默认值为lambda
x:x.values.get('timestamp')
-valid\\u time-签名请求有效的秒数(基于签名的时间戳)。默认值为5
-摘要-摘要类型,默认值为hashlib.sha1
…|构建
状态图像::https://travis-ci.org/phillipmartin/flask-hmacauth.svg?分支=主
==
`构建状态<;https://travis ci.org/phillipmartin/flask hmacauth>;` a
模块简化了flask中restful api的hmac风格身份验证,
它还构建了简单的rbac概念,并通过时间戳反重放。对于get请求,path部分和所有参数都是散列的。对于post请求,还将添加请求主体。默认情况下,模块希望查询字符串或请求正文中存在通过x-auth-signature进行身份验证的头、帐户id和时间戳参数(包含明显的
值)。timestamp可以
为任何格式datetime。fromTimestamp()可以解析。帐户ID将被
用于通过AccountBroker查找给定帐户的机密和角色。
如果身份验证失败,应用程序将向客户端返回403。但是,所有
都可以更改。
accountbroker的概念用于将此模块与任何实际的用户/角色管理逻辑分离。提供了两个简单的accountbroker
实现。
示例
==
server
----
:
tmgr=dictaccountbroker(
accounts={
"admin":{"secret":;hi^897t7utf,"rights":["create","edit","delete","view"]},
"editor":{"secret":"afstr5afewr","rights":["create","edit","view"]},
"guest":{"secret":"asdfjoiu%i,"rights"用法:["view"]}
}
hmacmgr=hmacmanager(accountmgr,app)
…
@app.route('/api/v1/create')
@hmac_auth("create")
def create_ation():
…
client
----
:
import requests
import time
hashlib
路径和查询="/api/v1/create?timestamp="+str(int(time.time())+"&;account廑id=admin&;foo=bar"
host="https://example.com"
sig=hmac.new(";hi^897t7utf",digestmod=hashlib.sha1,msg=path廑and廑query).hexdigest()
req=requests.get(host+path廑and廑query,headers={'x-auth-signature':sig})
代理
==
以下方法来实现此目的:
-get \-secret(account \-id)-返回给定帐户
id的字符串机密。如果帐户不存在,则返回none
-has \-u-rights(account \-id,rights)-如果帐户\-id具有列表r中的所有权限,则返回trueights,否则返回false。
如果帐户不存在,则返回false。
-处于活动状态(帐户ID)-如果帐户ID处于活动状态(对于
要为活动定义的任何定义),则返回true,否则返回
false。
flask hmacauth附带两个简单的acccountbroker实现,一个基于dict的accountbroker(dictaccountbroker)和一个静态accountbroker
(staticaccountbroker)。
dictaccountbroker
----
lah",
权限:["right1","right2",…]
}
…
}
它还公开了add\\u accounts和del\\\u accounts方法来动态修改
帐户。
staticaccountbroker
----
用户和角色管理,并设置用于hmac的静态密钥。注意,如果使用该类,则需要将staticaccountbroker.get把account作为account id
参数传递给hmacmanager,或者在查询字符串中为account id提供一个虚拟值
诱因nt通过
数据库。在这种情况下,您的authenticationbroker类只需要执行必要的sql查询来满足上面的方法,就可以了。此对象包含IS\\U authorized
方法,该方法实际上执行HMAC验证和角色检查。
在简单的情况下,您只需向此对象的构造函数传递
Flask应用程序对象和AccountBroker对象。在更复杂的
情况下,如果要更改默认值,可以使用以下
选项:
-app-这是烧瓶应用程序容器
-account\u broker-这是applicationbroker对象
-account\u id-这是可调用的,当馈送请求对象时我将返回请求的帐户ID。其默认值为
lambda x:x.value s.get('account\\u id')
-signature-这是可调用的,当馈送请求对象时,它将
返回请求的签名。默认值为
get \-signature=lambda x:x.headers.get('x-auth-signature')。
-timestamp-这是一个可调用的,当馈送请求对象时,它将
返回请求的时间戳。默认值为lambda
x:x.values.get('timestamp')
-valid\\u time-签名请求有效的秒数(基于签名的时间戳)。默认值为5
-摘要-摘要类型,默认值为hashlib.sha1
…|构建
状态图像::https://travis-ci.org/phillipmartin/flask-hmacauth.svg?分支=主