跳转到主要内容

Django对草案RFC ietf-oauth-v2-http-mac-01的基本实现

项目描述

描述:

这是Django对oauth-v2-http-mac-01草案的基本实现

作者:

Nicholas Devenish

概述

此软件包实现了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()

凭据对象默认会使用随机标识符和密钥进行实例化,并将过期日期设置为未来的某一天。这些都可以通过设置 identifierkeyexpiry 模型字段来覆盖。

当发起请求时,您可以使用两种装饰器之一来确保客户端已正确认证。第一个装饰器 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 (10.6 kB 查看散列)

上传时间

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面