简化在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?分支=主

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java检查整数是0还是检查变量是null更好?   java Android Kotlin(初学者)使用File(),并从ACTION\u GET\u内容返回Uri   java JavaFx在“内部场景”和根场景之间切换   spring将XMLBean配置转换为java配置   java JPA HIBERNATE映射列两次(embeddedID和POJO)   c#单态模式模型在什么情况下适用?   java请求。getRemoteUser在特定时间后返回null?   spring boot中PUT api控制器的java my单元测试用例失败   java在字符串中互换地解析和替换值   java Android JNI在应用程序中检测到错误:调用JNI GetMethodID时出现挂起异常   JavaSpringDataMongo:使用非简单键持久化映射   爪哇玻璃鱼连接被拒绝   java如何在用户注册时发送特定电子邮件id的自动回复?   Java列表:实例化时和之后的赋值之间的差异