通过Slack进行员工认证,POLITICO的方式。
项目描述
__ _____ _____ __ .__
_______/ |______ _/ ____\/ ____\ _____ __ ___/ |_| |__
/ ___/\ __\__ \\ __\\ __\ \__ \ | | \ __\ | \
\___ \ | | / __ \| | | | / __ \| | /| | | Y \
/____ > |__| (____ /__| |__| (____ /____/ |__| |___| / /\
\/ \/ \/ \/ \/
POLITICO员工认证
此应用程序存储了一些我们在POLITICO的各种Django应用程序中使用的实用工具,以集成我们的员工授权和认证,该认证通过Python Social Auth
使用Slack实现。
要求
-
Python 3.6 —
brew install python
-
Pipenv —
brew install pipenv
-
Django(已在2.1.x和2.2.x版本上测试过)
-
具有用户的Slack工作空间
-
连接到该工作空间的Slack应用程序,其中“重定向URL”条目与以下模式匹配
http://<你的服务器名称>/social/complete/slack/
(注意:同一个应用可以有多个“重定向URL”。对于本地开发,您需要将
localhost
别名设置为所选子域名,具体请参考下面的“域名解析”部分。) -
可选: PostgreSQL —
brew install postgresql
包含内容
./staff_auth/
处理员工Slack授权和认证的应用。
./staff_auth/templates/admin/login.html
和 ./staff_auth/static/staff_auth/css/custom-login.css
自定义HTML和CSS,将“员工登录(使用Slack)”按钮添加到标准的Django管理登录表单。
staff_auth.backend.WorkspaceSpecificSlackOAuth2
Python Social Auth的Slack认证后端的子类。与原始版本不同,这个版本强制用户使用指定Slack工作区的凭据登录(而不是任何Slack工作区的凭据)。
staff_auth.middleware.InvalidWorkspaceErrorMiddleware
一个中间件,监听Python Social Auth的AuthForbidden
异常,并将它们映射到StaffAuthErrorView
页面中的丰富输出。
staff_auth.pipeline.associate_by_email
一个函数,查找任何具有与签署者相同的电子邮件地址的现有Django用户,并将新登录绑定到同一账户——但前提是该用户之前已经有过独立的社会认证绑定。
staff_auth.pipeline.promote_staffer_to_staff
一个函数,当用户首次使用Slack凭据登录时,将所有Slack认证用户提升到“员工”状态(意味着他们可以登录Django管理)。
staff_auth.pipeline.promote_manager_to_superuser
一个函数,当用户首次使用Slack凭据登录时,将所有Slack认证用户提升到“超级用户”状态(意味着他们可以登录Django管理)——如果他们的Slack账户上的电子邮件地址与settings.MANAGERS
列表中找到的电子邮件地址相匹配。
staff_auth.views.StaffAuthErrorView
如果用户尝试通过不同的Slack工作区登录,则显示给用户的错误页面。
(注意,此视图的HTML和CSS分别位于./staff_auth/templates/staff_auth/auth-error.html
和./staff_auth/static/staff_auth/css/page-styles.css
。)
./example/
一个示例Django项目,展示了我们如何实现员工Slack访问。
在这个目录中,您将找到一个标准(如果有些简陋)的Django应用,包括顶层的一个示例.env
文件、一个Pipfile
和一个manage.py
脚本。
在exampleapp
子目录中是此示例应用的settings.py
文件(您可以在其中看到politico-staff-auth
所需配置变量的示例实现),还有一个urls.py
文件,用于演示如何执行这部分配置。标准辅助文件(包括wsgi.py
)也可以在这个子目录中找到。
启动示例应用
-
将当前目录切换到这个README文件下一级的
./example/
目录,并安装依赖项。cd ./example/ pipenv install
-
从
.env.example
模板创建一个新的.env
文件,并插入适当的值。cp .env.example .env
有关每个设置的详细信息,请参阅下面的“配置”部分。
-
创建一个新的空数据库,然后用必要的表填充它。
make database pipenv run python manage.py migrate
-
启动Django测试服务器。
pipenv run python manage.py runserver
-
导航到测试服务器上的管理站点,然后点击“员工登录”按钮。
安装
-
从PyPI安装
pipenv install politico-staff-auth
-
将
staff_auth
和social_django
添加到Django中已安装的应用列表。在项目的
settings.py
INSTALLED_APPS = [ "staff_auth", # ... # Existing installed apps # ... "social_django", ]
注意:在列表中,
staff_auth
应用必须排在第一位(或者至少在现有的django.contrib.admin
行之前)。social_django
行应出现在Django本身分发的所有应用之后。 -
添加员工的Slack工作区的凭据。
在项目的
settings.py
STAFF_AUTH_SLACK_KEY = "auth-key" STAFF_AUTH_SLACK_SECRET = "secret-key" STAFF_AUTH_SLACK_TEAM = "my-value-here"
有关这些值的更多信息,请参阅下面的“配置”部分。
注意:我们建议从环境变量中读取这些值,但各有所好。
-
添加所需的中间件以实现丰富的登录错误消息。
在项目的
settings.py
MIDDLEWARE = [ # ... # Existing middleware # ... "staff_auth.middleware.InvalidWorkspaceErrorMiddleware", ]
注意:
staff_auth.middleware.InvalidWorkspaceErrorMiddleware
应该添加到现有的MIDDLEWARE
列表末尾。 -
完成前面的步骤后,现在您可以实施基本的工作人员身份验证设置。
在项目的
settings.py
from staff_auth.configured_settings import configure_staff_auth staff_auth_settings = configure_staff_auth( key=STAFF_AUTH_SLACK_KEY, secret=STAFF_AUTH_SLACK_SECRET, team=STAFF_AUTH_SLACK_TEAM, ) for setting_name, setting_value in staff_auth_settings.items(): globals()[setting_name] = setting_value
-
设置 Django 在用户被要求登录时使用 Slack 身份验证后端。
在项目的
settings.py
LOGIN_URL = "staff_auth:slack-login"
-
连接
staff_auth
和social_django
的 URL。在您项目的顶层 URLconf(
urls.py
文件)中urlpatterns = [ # ... # Existing URL patterns # ... path("social/", include("social_django.urls", namespace="social")), path("staff-auth/", include("staff_auth.urls")), ]
-
可选: 添加管道。
在项目的
settings.py
SOCIAL_AUTH_PIPELINE = ( "social_core.pipeline.social_auth.social_details", "social_core.pipeline.social_auth.social_uid", "social_core.pipeline.social_auth.auth_allowed", "social_core.pipeline.social_auth.social_user", "social_core.pipeline.user.get_username", "social_core.pipeline.user.create_user", "social_core.pipeline.social_auth.associate_user", "social_core.pipeline.social_auth.load_extra_data", "staff_auth.pipeline.promote_staffer_to_staff", "staff_auth.pipeline.promote_manager_to_superuser", "social_core.pipeline.user.user_details", )
您可以禁用上面列出的
staff_auth.pipeline
类中的任意一个或两个,但请注意保留这里的顺序——重新排序这些管道可能会导致难以调试的不预期后果。注意:
staff_auth.pipeline.promote_staffer_to_staff
和staff_auth.pipeline.promote_manager_to_superuser
的行为在上述“内容”部分中描述。注意 2:如果您没有使用上述任一
staff_auth.pipeline
类,请跳过此步骤,并确保您的项目的settings.py
文件没有设置SOCIAL_AUTH_PIPELINE
值。 -
可选: 修改用户成功登录或注销后跳转到的 URL。
这些都是标准的 Django 设置,可以是 URL 或命名 URL 模式(就像您传递给
{% url %}
模板标签一样)。在项目的
settings.py
LOGIN_REDIRECT_URL = "/my/url/pattern/" LOGOUT_REDIRECT_URL = "namespace:view-name"
配置
设置 | 它的作用 |
---|---|
STAFF_AUTH_SLACK_KEY |
从您连接到工作区的 Slack "应用" 中获取的 'Client ID'。 作为 SOCIAL_AUTH_SLACK_KEY 传递给 Python Social Auth。 |
STAFF_AUTH_SLACK_SECRET |
此 Slack "应用" 的 Client Secret 。作为 SOCIAL_AUTH_SLACK_SECRET 传递给 Python Social Auth。 |
STAFF_AUTH_SLACK_TEAM |
您的用户有账户的 Slack 工作区名称。(一个方便的记忆方法:它也是用户登录到使用 Slack 本身的 slack.com 子域。)作为 SOCIAL_AUTH_SLACK_TEAM 传递给 Python Social Auth。 |
版权
© 2019–present POLITICO LLC
项目详情
politico-staff-auth-0.0.6.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2a35b36788e0c6cb60eb1512edeae0e8796d9a2217fab164d372b202c4637304 |
|
MD5 | d29180e7d86f23d20a8296784b64ccae |
|
BLAKE2b-256 | 6593164a7bf61a5470a9da3a461686c86c9c5293b01a43812745f3942705b91b |