跳转到主要内容

Datasette插件和ASGI中间件,用于对GitHub用户进行身份验证

项目描述

datasette-auth-github

PyPI Changelog Tests License

对GitHub进行用户身份验证的Datasette插件。

设置说明

  • 安装插件: datasette install datasette-auth-github
  • 创建GitHub OAuth应用程序: 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"
        ]
    }
}

如果使用了以下文档中记录的 load_teamsload_orgs,则 gh_orgsgh_teams 属性将只存在。

限制特定用户的访问

您可以使用Datasette的 权限机制 来指定哪些用户或用户组可以访问您的实例。以下是如何仅允许GitHub用户 simonw 访问的示例

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

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

请注意,GitHub允许用户更改他们的用户名,其他人也可以声称旧用户名。如果您担心用户可能会更改用户名,您可以将允许块与GitHub用户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_actorcookie中。

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

您可以通过在任何更改GitHub组织成员时旋转DATASETTE_SECRET环境变量来纠正这一点。

更改此值将使所有现有用户注销,通过使他们的cookie无效。当他们再次登录时,他们的新成员资格将记录在新的cookie中。

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

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

datasette-auth-github-0.13.1.tar.gz (6.3 kB 查看哈希值)

上传时间

构建分发

datasette_auth_github-0.13.1-py3-none-any.whl (10.7 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面