为Django web应用程序提供magiclink身份验证
django-authlink的Python项目详细描述
Django Authlink
django authlink
django-authlink
是一个Django应用程序,它使用魔术链接方便身份验证。这非常适合于允许移动应用程序对webviews进行身份验证,但也可以用于其他需要对用户进行预身份验证的情况。在
包括了Django Rest框架的方便api。在
安装
pip install django-authlink
将authlink
添加到已安装的应用程序设置中,然后在API中公开authlink.api.rest_framework.views.AuthLinkCreateView
,并在web应用程序中公开{
您使用的确切URL由您决定,但下面是一个示例:
^{pr2}$现在您应该设置AUTHLINK_URL_TEMPLATE
以匹配web应用程序中的URL结构:
AUTHLINK_URL_TEMPLATE="/authlink/{key}"
这将允许API建立正确的位置,以便移动应用程序加载到web视图中。在
用法
当您的移动应用程序需要加载经过身份验证的webview时,它应该点击API以获取authlink:
POST /api/authlink{ "url": "/some/whitelisted/path/in/your/webapp"}
假设用户当前已通过身份验证,则返回:
HTTP 201 CreatedContent-Type: application/jsonLocation: https://authlink/k6s1fhv3a6e99liamatxqrn1m6nynn1krbtzw47wxckhyiahwohp4f7bb8del6hf{ "url": "/some/whitelisted/path/in/your/webapp"}
要加载经过身份验证的webview,您的移动应用程序现在可以使用上面的响应中的Location
打开其特定的webview类,如果令牌有效,目标URL将加载经过身份验证的。在
安全
当您共享authlink时,实际上是在提供对用户帐户的无限制的身份验证访问。django-authlink
试图减少这些链接中的一个落入攻击者手中的机会,并使用多种方法授予他们访问另一个用户帐户的权限。在
- 有效期很短;默认情况下,authlinks的有效期仅为60秒。您可以减少此值以进一步关闭有效性窗口和漏洞。在
- URL白名单;您需要指定允许为哪些web应用程序URL创建authlinks。请注意,一旦用户通过身份验证,他们就可以四处浏览,所以这并不会真正限制他们使用该URL。在
- IP地址匹配;通过API创建authlink时使用的IP地址必须与web应用程序中使用authlink的请求的IP地址匹配。在
尽管采取了这些措施,使用这种认证方法仍然存在不可否认的安全风险。你需要权衡你的特定用例的利弊,并在那里自己决定这是否对你的项目有意义。在
配置
AUTHLINK_URL_模板
默认值:“/authlink/{key}”
允许更改authlink create API生成的重定向url。在
AUTHLINK_URL_白名单
默认值:[]
要限制为其创建身份验证链接的URL名称列表。在
AUTHLINK_适配器_类
默认值:“authlink.adapter.DefaultAuthLinkAdapter““
您可以将适配器子类化,并添加任何要常规authlink行为的自定义。在
AUTHLINK\u TTL\u秒
默认值:60
允许增加或减少authlink的有效期。在
贡献
django-authlink
支持各种Python和Django版本。最好在提交之前测试一下这些。我们的Circle CI Integration将在推送时测试这些,但是在提交之前知道这一点可以避免为了使构建通过而进行大量额外的提交。在
环境设置
为了方便地在所有这些Python上测试并运行CI将执行的完全相同的东西,您需要设置pyenv并安装tox.ini中概述的Python版本。在
如果您在Mac OS X上,建议您使用brew。安装brew
后运行:
brew install pyenv pyenv-virtualenv pyenv-virtualenvwrapper
接下来,安装我们要测试的各种python版本,并为django-authlink
创建一个virtualenv:
pyenv install 3.6.10 pyenv install 3.7.6 pyenv install 3.8.1 pyenv virtualenv 3.8.1 authlink pyenv activate authlink pip install detox pyenv shell authlink 3.6.10 3.7.6
现在确保激活了authlink
virtualenv,使其他python版本也在我们的路径上,并运行测试!在
pyenv shell authlink 3.6.10 3.7.6 detox
这将执行测试按照tox.ini
中定义的并行环境。在
- 项目
标签: