datasette-auth-github 作者 simonw

Star

README 源代码

datasette-auth-github

PyPI Changelog Tests License

这是一个将用户与 GitHub 进行认证的 Datasette 插件。

设置说明

  • 安装插件:datasette install datasette-auth-github
  • 创建一个 GitHub OAuth app:https://github.com/settings/applications/new
  • 将授权回调 URL 设置为 http://127.0.0.1:8001/-/github-auth-callback
  • 创建一个具有以下结构的 metadata.json 文件
{
    "title": "datasette-auth-github demo",
    "plugins": {
        "datasette-auth-github": {
            "client_id": {"$env": "GITHUB_CLIENT_ID"},
            "client_secret": {"$env": "GITHUB_CLIENT_SECRET"}
        }
    }
}

现在你可以这样启动 Datasette,将密钥作为环境变量传入

$ GITHUB_CLIENT_ID=XXX GITHUB_CLIENT_SECRET=YYY datasette \
    fixtures.db -m metadata.json

请注意,将密钥硬编码在 metadata.json 中是一个坏主意,因为任何能够访问 /-/metadata 的人都可以看到它们。相反,我们使用 Datasette 添加秘密插件配置选项的机制。

默认情况下,匿名用户仍然能够与 Datasette 交互。如果你希望所有用户必须先使用 GitHub 账户登录,请将此添加到你的 metadata.json

{
    "allow": {
        "id": "*"
    },
    "plugins": {
        "datasette-auth-github": {
            "...": "..."
        }
    }
}

已认证的用户

登录后访问 /-/actor 查看已认证用户的结构。它应该看起来像这样

{
    "actor": {
        "display": "simonw",
        "gh_id": "9599",
        "gh_name": "Simon Willison",
        "gh_login": "simonw",
        "gh_email": "...",
        "gh_orgs": [
            "dogsheep",
            "datasette-project"
        ],
        "gh_teams": [
            "dogsheep/test"
        ]
    }
}

gh_orgsgh_teams 属性仅在你使用了 load_teamsload_orgs(在下面有文档说明)时才会出现。

限制特定用户的访问

你可以使用 Datasette 的权限机制来指定允许哪些用户访问你的实例。以下是仅限 GitHub 用户 simonw 访问的方法

{
    "allow": {
        "gh_login": "simonw"
    },
    "plugins": {
        "datasette-auth-github": {
            "...": "..."
        }
    }
}

"allow" 块可以放置在数据库、表或查询级别:详细信息请参阅在 metadata.json 中配置权限

请注意,GitHub 允许用户更改用户名,并且其他人有可能抢注旧的用户名。如果你担心用户可能会更改用户名,你可以根据 GitHub 用户 ID 来键入允许块,因为用户 ID 不会改变。

{
    "allow": {
        "gh_id": "9599"
    }
}

限制对特定 GitHub 组织或团队的访问

你还可以限制只有特定 GitHub 组织的成员才能访问。

你需要配置插件以便在用户首次登录时检查他们是否是该组织的成员。你可以使用 "load_orgs" 插件配置选项来完成。

然后你可以使用 "allow": {"gh_orgs": [...]} 来指定允许访问的组织。

{
    "plugins": {
        "datasette-auth-github": {
            "...": "...",
            "load_orgs": ["your-organization"]
        }
    },
    "allow": {
        "gh_orgs": "your-organization"
    }
}

如果你的组织按照团队进行组织,你可以像这样限制对特定团队的访问

{
    "plugins": {
        "datasette-auth-github": {
            "...": "...",
            "load_teams": [
                "your-organization/staff",
                "your-organization/engineering",
            ]
        }
    },
    "allows": {
        "gh_team": "your-organization/engineering"
    }
}

如果用户从组织或团队中移除怎么办

用户所属组织和团队的成员身份会在他们首次登录时检查一次。这些团队和组织信息随后会保存在用户的签名 ds_actor cookie 中。

这意味着如果一个用户被从组织或团队中移除但仍然拥有 Datasette cookie,他们仍然可以访问该 Datasette 实例。

你可以通过在你对 GitHub 组织成员进行任何更改时轮换 DATASETTE_SECRET 环境变量来解决此问题。

更改此值会通过使所有现有用户的 cookie 失效来强制他们退出登录。当他们再次登录时,他们新的成员身份将被记录在一个新的 cookie 中。

有关更多详细信息,请参阅 Datasette 文档中的配置秘密