datasette-auth-passwords 作者 simonw

加星

README 源代码

datasette-auth-passwords

PyPI Changelog License

用于使用密码进行认证访问的 Datasette 插件

安装

在 Datasette 的同一环境中安装此插件。

datasette install datasette-auth-passwords

演示

此插件的演示正在运行,网址是 https://datasette-auth-passwords-demo.datasette.io/

演示配置为向所有人显示 public.db 数据库,但 private.db 数据库仅对登录用户显示。

您可以在 https://datasette-auth-passwords-demo.datasette.io/-/login 处登录,使用用户名 root 和密码 password!

使用方法

此插件基于一组硬编码在插件配置中的用户名/密码账户列表工作。

首先,您需要创建一个密码哈希。有三种方法可以做到

现在将以下内容添加到您的 metadata.json

{
    "plugins": {
        "datasette-auth-passwords": {
            "someusername_password_hash": {
                "$env": "PASSWORD_HASH_1"
            }
        }
    }
}

现在可以在运行 Datasette 时在环境变量中指定密码哈希。您可以这样做

PASSWORD_HASH_1='pbkdf2_sha256$...' \
    datasette -m metadata.json

请务必在此处使用单引号,否则密码哈希中的 $ 符号可能会被您的 shell 错误解释。

您现在可以使用 /-/login 处的表单登录到您的实例,用户名为 someusername,密码为您用于创建哈希的密码。

您可以在配置中包含任意数量的账户,每个账户都有不同的用户名。

datasette hash-password 命令

此插件提供了一个新的 CLI 命令,datasette hash-password。您可以在不带参数的情况下运行此命令,以交互方式创建新的密码哈希

datasette hash-password
Password: 
Repeat for confirmation: 
pbkdf2_sha256$260000$1513...

或者,如果您想将其用作脚本的一部分,可以添加 --no-confirm 选项,以直接从传递给标准输入的值生成哈希

echo 'my password' | datasette hash-password --no-confirm
pbkdf2_sha256$260000$daa...

指定 actor

默认情况下,登录用户将生成一个仅包含其用户名的 actor 块

{
    "id": "someusername"
}

您可以通过包含一个 "actors" 配置块来自定义用于用户名的 actor,如下所示

{
    "plugins": {
        "datasette-auth-passwords": {
            "someusername_password_hash": {
                "$env": "PASSWORD_HASH_1"
            },
            "actors": {
                "someusername": {
                    "id": "someusername",
                    "name": "Some user"
                }
            }
        }
    }
}

HTTP 基本认证选项

此插件默认使用 HTML 表单实现登录,该表单设置了一个签名的认证 cookie。

您也可以配置为使用 HTTP 基本认证来代替。

为此,在您的插件配置中的 datasette-auth-passwords 块中添加 "http_basic_auth": true

此选项引入以下行为

  • 账户用户名和密码的配置方式与基于表单的认证相同
  • Datasette 中的每个页面 - 即使是通常不使用认证的页面,例如静态资源 - 都会显示浏览器登录提示
  • 用户将无法退出,除非完全关闭浏览器

此模式的演示位于 https://datasette-auth-passwords-http-basic-demo.datasette.io/ - 使用用户名 root 和密码 password! 登录

与 datasette publish 一起使用

如果您使用 datasette publish 命令发布数据,您可以使用 --plugin-secret 选项来安全地配置您的密码哈希(参见 秘密配置值)。

您可以像这样运行命令

datasette publish cloudrun mydatabase.db \
    --install datasette-auth-passwords \
    --plugin-secret datasette-auth-passwords root_password_hash 'pbkdf2_sha256$...' \
    --service datasette-auth-passwords-demo

这将允许您以用户名 root 登录,使用的密码是您用于创建哈希的密码。

开发

要在本地设置此插件,首先检出代码。然后创建一个新的虚拟环境

cd datasette-auth-passwords
python3 -mvenv venv
source venv/bin/activate

或者如果您正在使用 pipenv

pipenv shell

现在安装依赖项和测试

pip install -e '.[test]'

运行测试

pytest