为Django web应用程序提供magiclink身份验证

django-authlink的Python项目详细描述


Django Authlink

CircleCICodecovCode style: black

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试图减少这些链接中的一个落入攻击者手中的机会,并使用多种方法授予他们访问另一个用户帐户的权限。在

  1. 有效期很短;默认情况下,authlinks的有效期仅为60秒。您可以减少此值以进一步关闭有效性窗口和漏洞。在
  2. URL白名单;您需要指定允许为哪些web应用程序URL创建authlinks。请注意,一旦用户通过身份验证,他们就可以四处浏览,所以这并不会真正限制他们使用该URL。在
  3. 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

现在确保激活了authlinkvirtualenv,使其他python版本也在我们的路径上,并运行测试!在

pyenv shell authlink 3.6.10 3.7.6
detox

这将执行测试按照tox.ini中定义的并行环境。在

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

推荐PyPI第三方库


热门话题
java为什么@DELETE REST不起作用?   带有JPA2的java表值参数。1和Hibernate,Sql Server   如何将Java类添加到Xamarin VS2017项目   绘制多边形时出现java空指针异常   java Apache WebClient 303状态未重定向   java如何用一组字符串数组从数据库中获取数据   java是否可以使用Google Drive API向文件中添加脚本?   java组织。阿帕奇。贾斯珀。JspC jar文件下载   java在整个JSON映射中将单个值作为JSON流   通过命令行将文件输入到java   java rs.next()总是返回false   java标记异常,通知调用方利用异常消息   java Spring YML数组属性为空