Django对草案RFC ietf-oauth-v2-http-mac-01的基本实现
项目描述
- 描述:
这是Django对oauth-v2-http-mac-01草案的基本实现
概述
此软件包实现了OAuth-2相关的MAC授权协议的当前草案。这是设计用来允许在容易受到拦截的连接上发出加密可靠的请求。它基于一个共享的“密钥”,用于在客户端和资源服务器上计算加密签名,以验证请求是真实的。
此实现非常简单,允许Django视图要求使用此认证方法,或可选地使用认证信息来确定请求的用户。
功能
这是此软件包提供的协议功能和特性
唯一的nonce/timestamp/client ID检查;这防止了重放攻击的可能性(尽管,请参阅限制)
使用hmac-sha-1算法
部分 ext头支持
使用现有的Django用户框架
允许可选使用凭证
认证错误通过WWW-Authentication错误参数返回
在Django 1.3和1.4上进行了测试
用法
在将 auth_mac 添加到项目设置并同步数据库后,您可以通过管理员界面创建一组新的凭据,或者通过创建与用户关联的 Credentials 对象。
from auth_mac import Credentials new_auth = Credentials(user=some_user) new_auth.save()
凭据对象默认会使用随机标识符和密钥进行实例化,并将过期日期设置为未来的某一天。这些都可以通过设置 identifier、key 和 expiry 模型字段来覆盖。
当发起请求时,您可以使用两种装饰器之一来确保客户端已正确认证。第一个装饰器 require_credentials,如果认证失败,将返回401未授权响应
from django.http import HttpResponse from auth_mac.decorators import require_credentials @require_credentials def some_protected_view(request): return HttpResponse("This view only runs when authorised!")
第二个装饰器 read_credentials 允许即使没有凭据也能访问,但传递凭据将覆盖 HttpRequest 的用户属性到授权用户
from django.http import HttpResponse from auth_mac.decorators import read_credentials @read_credentials def some_optionally_protected_view(request): return HttpResponse("This view can accept Anonymous Users!")
在这种情况下,如果用户是通过其他授权方法访问的,即通过会话cookie登录,则(如果传递)凭据信息将覆盖之前的登录信息。
限制
这只是一个非常基本的协议实现。具体来说,它不提供
分发秘密信息的方法。您可以通过OAuth2实现或手动分发密钥来完成此操作。这是因为当前的设计意图只是为几个授权个人客户端提供REST访问。
一次性密码过期。在此阶段,一次性密码值必须无限期保留。一些时间戳基础设施已经到位,但在完成之前,删除一次性密码是不安全的。
hmac-sha-256 尚不支持
没有针对防止洪水请求的保护的速率限制
在计算基本字符串时使用 ext 参数,但尚未正确处理或测试。
时间戳验证(包括保存客户端偏移)目前不受限制。将来这将可配置。
项目详细信息
django-auth_mac-0.1.2.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 54343169d256772c7adfbef732e9ca1a24fc594a4610c605b5254f69841eb2b3 |
|
MD5 | 2bb2e4c553f604706540609b7c793ba1 |
|
BLAKE2b-256 | 63179443a3701ddb1adf66eea32916fd7a22b8611aff04a874615fd58c4d0735 |