Django API身份验证和集中授权的应用程序
项目描述
Django工具,用于共享API身份验证和数据分析。
django-locksmith提供了一些Django应用程序,包括locksmith.hub、locksmith.auth和locksmith.mongoauth。
locksmith.hub是一个应用程序,它简化了注册,并提供了对任何API报告的通用分析支持。
locksmith.auth提供从中心服务器发行API密钥和验证API调用的机制。它还包括一个管理命令,用于向locksmith.hub实例提交夜间报告。
locksmith.mongoauth提供与locksmith.auth相同的接口,但不是使用Django的ORM,而是依赖于pymongo并使用MongoDB数据库。与locksmith.auth类似,它还包括一种方式,可以将夜间使用报告提交给locksmith.hub实例。
django-locksmith是Sunlight Labs的项目(c)2011。由James Turk编写 <jturk@sunlightfoundation.com>。
所有代码都在BSD风格许可下,有关详细信息,请参阅LICENSE。
要求
对于locksmith.hub:* python >= 2.6 * Django >= 1.4 * South >= 0.7.6 * django-taggit * celery >= 3.0.16
对于locksmith.auth和locksmith.mongoauth:* python >= 2.5 * Django >= 1.2
locksmith.hub
locksmith.hub提供了一些视图、认证后端和管理命令。locksmith.hub的单个实例可以作为任何数量相关API的核心。
设置
要使用locksmith.hub,需要在settings.py中添加一些内容。
在INSTALLED_APPS中添加‘locksmith.hub’。
在AUTHENTICATION_BACKENDS中添加‘locksmith.hub.auth_backend.LocksmithBackend’。
这将使locksmith.hub的模型和管理命令可用,并允许用户使用他们的电子邮件和apikey进行登录。
可选设置
LOCKSMITH_EMAIL_SUBJECT:如果设置,将用作用户请求密钥时发送的电子邮件的主题。(默认为‘API注册’)LOCKSMITH_REPLICATED_APIS:Locksmith有两种密钥同步机制。默认使用较老的、有状态的机制。要选择使用较新的、无状态的机制进行API,请在此处添加API的名称。这是一个临时设置。在0.8版本中,所有API都将使用新机制,此设置将引发弃用警告。
模板
locksmith.hub应用提供了一套前端模板,可以集成到您的网站中。为了提供最大的灵活性,这些模板扩展了您的项目基础模板。您应使用LOCKSMITH_BASE_TEMPLATE指定基础模板的路径。您还应指定一个模板,当用户缺乏对给定视图的授权时显示该模板,通过设置LOCKSMITH_UNAUTHORIZED_TEMPLATE。
locksmith.hub的每个视图都允许您指定一个视图以替换默认视图。这允许您在基础和顶级模板中使用{% include %}标签。如果需要,您可以使用这些设置覆盖每个视图的模板
LOCKSMITH_ANALYTICS_INDEX_TEMPLATE LOCKSMITH_API_ANALYTICS_TEMPLATE LOCKSMITH_KEY_ANALYTICS_TEMPLATE LOCKSMITH_KEYS_LIST_TEMPLATE LOCKSMITH_KEYS_LEADERBOARD_TEMPLATE LOCKSMITH_REGISTER_TEMPLATE
URLs
locksmith.hub提供两组URL模式,一组用于注册,另一组用于分析。
它们可以通过以下行添加到您的urls.py中
(r’^’, include(‘locksmith.hub.urls’)),
这添加了一个accounts/路径,包含面向用户的URL,并添加了一个analytics/路径,该路径添加了只有员工才能访问的分析视图。
locksmith.auth和locksmith.mongoauth
locksmith.auth和locksmith.mongoauth具有相同的目的,基本上可以互换。
这两个应用都提供URL端点和一条管理命令,旨在使编写从locksmith.hub实例获取其认证详情的API尽可能简单。
在以下大多数地方它们可以互换,并表示为locksmith.(mongo)auth,如果您更喜欢将密钥/日志存储在MongoDB中,请使用locksmith.mongoauth,如果您更喜欢使用标准Django模型,请使用locksmith.auth。
安装
将‘locksmith.(mongo)auth’添加到INSTALLED_APPS
将类似以下行添加到urls.py中:(r’^api/’, include(‘locksmith.(mongo)auth.urls’))
将以下设置添加到您的settings.py中
- LOCKSMITH_HUB_URL
您的locksmith.hub实例的URL
- LOCKSMITH_SIGNING_KEY
此locksmith实例的签名密钥
- LOCKSMITH_API_NAME
此locksmith实例的名称
您可以选择启用APIKeyMiddleware,通过将'locksmith.(mongo)auth.middleware.APIKeyMiddleware'添加到您的MIDDLEWARE_CLASSES。此中间件使用了两个额外的可选设置
- LOCKSMITH_QS_PARAM
用于检查API密钥的查询字符串参数(默认:apikey)
- LOCKSMITH_HTTP_HEADER
用于检查API密钥的HTTP头(默认:HTTP_X_APIKEY)
locksmith.auth设置
如果使用locksmith.auth,则必须添加一些额外的设置以启用通过./manage.py apireport进行统计报告
- LOCKSMITH_STATS_APP
API日志模型的应用程序(默认:api)
- LOCKSMITH_STATS_MODEL
API日志模型名称(默认:LogEntry)
- LOCKSMITH_STATS_DATE_FIELD
日志模型上的时间戳字段名称(默认:timestamp)
- LOCKSMITH_STATS_ENDPOINT_FIELD
日志模型上的端点字段名称(默认:method)
- LOCKSMITH_STATS_USER_FIELD
日志模型上的键字段名称(默认:caller_key)
locksmith.mongoauth设置
如果使用locksmith.mongoauth,可以提供多个设置来配置MongoDB连接。
- LOCKSMITH_MONGO_HOST
MongoDB服务器的地址(默认:localhost)
- LOCKSMITH_MONGO_PORT
MongoDB服务器的端口(默认:27017)
- LOCKSMITH_MONGO_DATABASE
MongoDB数据库名称(默认:locksmith)
用法
如果使用locksmith.auth,将使用locksmith.auth.models.ApiKey模型来存储API密钥信息。
如果使用locksmith.mongoauth,将创建一个名为locksmith.keys的集合,包含‘_id’,‘status’和‘email’字段。
当用户将密钥传递给您的API时,您应该在服务请求之前检查是否存在这样的ApiKey对象并且它是否处于活动状态(即status=’A’)。如果使用提供的APIKeyMiddleware,此检查将自动处理。
报告统计数据
要向locksmith.hub实例报告您的API使用情况,可以每天调用./manage.py apireport。
连接locksmith.hub和locksmith.auth实例
假设您已有一个如上所述运行的locksmith.hub实例和一个locksmith.(mongo)auth实例,最后一步是将这两个实例连接起来,以便API注册成为实际可用的密钥,并且分析能够返回。
hub:为新的API添加一个新的locksmith.hub.Api实例(选择一个名称和签名密钥) # hub:通过调用./manage.py pushkeys将所有现有密钥推送到新API的locksmith auth端点
假设您已经有一个常规的cronjob来推送新密钥,新的API现在将与其他API一样收到新密钥的通知。
TODO:记录非locksmith.auth启用API如何推送至locksmith.hub
项目详情
django-locksmith-0.8.0.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 856a9d6b4631f99e98c4372afece1ac1cb0c14d35bd61f754e7f32a260b8bc48 |
|
MD5 | 2f2afc4f41c597b1a913f9aa1190f2ec |
|
BLAKE2b-256 | 8498ba7a692d9468b827ab18257cd46f2d7cbedbe3ef2a58ab7a598fbb13fdd8 |