用于使用API令牌对访问进行身份验证的Datasette插件
datasette-auth-tokens的Python项目详细描述
数据集身份验证令牌
用于使用API令牌对访问进行身份验证的Datasette插件
安装
在与Datasette相同的环境中安装此插件。在
$ pip install datasette-auth-tokens
硬编码令牌
阅读关于Datasette的authentication and permissions system。在
此插件允许您配置秘密API令牌,可用于对Datasette发出经过身份验证的请求。在
首先,创建一个随机的API令牌。一个有用的方法是:
^{pr2}$决定此令牌应表示的参与者,例如:
{"bot_id":"my-bot"}
然后可以使用"allow"
块为该令牌提供访问特定操作的权限。要启用对配置的可写SQL查询的访问,可以在metadata.json
中使用:
{"plugins":{"datasette-auth-tokens":{"tokens":[{"token":{"$env":"BOT_TOKEN"},"actor":{"bot_id":"my-bot"}}]}},"databases":{":memory:":{"queries":{"show_version":{"sql":"select sqlite_version()","allow":{"bot_id":"my-bot"}}}}}}
这使用Datasette的secret configuration values mechanism允许将秘密令牌作为环境变量传递。在
按如下方式运行数据集:
BOT_TOKEN="this-is-the-secret-token" \
datasette -m metadata.json
现在,您可以像这样运行经过身份验证的API查询:
$ curl -H 'Authorization: Bearer this-is-the-secret-token' \
'http://127.0.0.1:8001/:memory:/show_version.json?_shape=array'
[{"sqlite_version()": "3.31.1"}]
数据库中的令牌
作为硬编码令牌列表的替代(或补充),您可以将令牌存储在数据库表中,并配置插件以使用SQL查询访问它们。在
您的查询需要使用一个:token_id
参数并返回至少两个列:一个名为token_secret
,另一个名为actor_*
-通常是actor_id
。还可以返回前缀为actor_
的列,以便为经过身份验证的参与者提供更多详细信息。在
下面是一个配置查询的简单示例:
selectactor_id,actor_name,token_secretfromtokenswheretoken_id=:token_id
这可以在类似这样的表上运行:
token_id | token_secret | actor_id | actor_name |
---|---|---|---|
1 | bd3c94f51fcd | 78 | Cleopaws |
2 | 86681b4d6f66 | 32 | Pancakes |
令牌的格式是令牌ID,然后是连字符,然后是令牌机密。例如:
1-bd3c94f51fcd
2-86681b4d6f66
SQL查询将以连字符前面的部分作为:token_id
参数执行。在
查询返回的token_secret
值将与连字符后的令牌部分进行比较,以检查令牌是否有效。在
前缀为actor_
的列将用于填充actor字典。在上面的例子中,2-86681b4d6f66
的标记将成为{"id": 32, "name": "Pancakes"}
的actor字典。在
要对此进行配置,请在插件配置中使用"query"
块,如下所示:
{"plugins":{"datasette-auth-tokens":{"query":{"sql":"select actor_id, actor_name, token_secret from tokens where token_id = :token_id","database":"tokens"}}},"databases":{"tokens":{"allow":{}}}}
此处的"sql"
键包含SQL查询。"database"
键具有执行查询所针对的附加数据库文件的名称-在本例中,它将针对tokens.db
执行。在
保护您的代币
任何有权访问dataset实例的人都可以使用它来读取tokens表中的token_secret
列。这可能不是你想要的!在
为了避免这种情况,您应该锁定对该表的访问。上面的配置示例演示了如何使用"allow": {}
块来实现这一点。有关如何锁定这种访问的更多信息,请参阅Datasette的Permissions documentation。在
- 项目
标签: