一个简单的Django应用程序,用于通过OIDC使用keycloak
项目描述
Keycloak OIDC
Keycloak OIDC是一个简单的Django应用程序,它封装了mozilla_django_oidc应用程序,并实现了我们在Datapunt使用的Keycloak身份验证方式。
它创建和更新用户,并根据keycloak提供的信息设置他们的电子邮件、用户名和姓氏,并根据keycloak角色管理组成员资格。
快速入门
-
使用pip安装
pip install datapunt_keycloak_oidc
-
将 "keycloak-oidc" 添加到您的 INSTALLED_APPS(确保在auth之后加载!)
INSTALLED_APPS = [ ... 'django.contrib.auth', 'keycloak_oidc', # load after auth! ]
-
将 mozilla_django_oidc.SessionRefreshMiddleware 添加到您的 MIDDLEWARE(涉及会话和身份验证的中间件必须最先添加!)
MIDDLEWARE = [ ... 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'mozilla_django_oidc.middleware.SessionRefresh', ]
-
将 OIDCAuthenticationBackend 添加到 AUTHENTICATION_BACKENDS
AUTHENTICATION_BACKENDS = [ 'keycloak_oidc.auth.OIDCAuthenticationBackend', ... ]
-
在 settings.py 中导入默认的 OIDC 设置。这些默认值在大多数情况下都会工作。
# Import from keycloak_oidc settings and use the defaults from keycloak_oidc.default_settings import *
-
在 settings.py 中设置 OIDC_RP_CLIENT_ID 和 OIDC_RP_CLIENT_SECRET。请注意,这些应该是保密的。因此,最好在OS ENV中设置。从keycloak提供者获取这些信息。
OIDC_RP_CLIENT_ID = os.environ['OIDC_RP_CLIENT_ID'] OIDC_RP_CLIENT_SECRET = os.environ['OIDC_RP_CLIENT_SECRET']
Keycloak只与白名单中的url通信。因此,请确保将生产环境的app url添加到keycloak。为了使本地开发成为可能,也请确保添加localhost:8080(或任何其他端口)。
-
将OIDC提供者URL添加到 settings.py,并设置正确的OS环境。此默认值将回退到验收keycloak URL。
OIDC_OP_AUTHORIZATION_ENDPOINT = os.getenv('OIDC_OP_AUTHORIZATION_ENDPOINT', 'https://iam.amsterdam.nl/auth/realms/datapunt-acc/protocol/openid-connect/auth') OIDC_OP_TOKEN_ENDPOINT = os.getenv('OIDC_OP_TOKEN_ENDPOINT', 'https://iam.amsterdam.nl/auth/realms/datapunt-acc/protocol/openid-connect/token') OIDC_OP_USER_ENDPOINT = os.getenv('OIDC_OP_USER_ENDPOINT', 'https://iam.amsterdam.nl/auth/realms/datapunt-acc/protocol/openid-connect/userinfo') OIDC_OP_JWKS_ENDPOINT = os.getenv('OIDC_OP_JWKS_ENDPOINT', 'https://iam.amsterdam.nl/auth/realms/datapunt-acc/protocol/openid-connect/certs') OIDC_OP_LOGOUT_ENDPOINT = os.getenv('OIDC_OP_LOGOUT_ENDPOINT', 'https://iam.amsterdam.nl/auth/realms/datapunt-acc/protocol/openid-connect/logout')
-
当使用Django-rest-framework时,将mozilla_django_oidc OIDCAuthentication添加到默认身份验证类(并确保已添加DRF SessionAuthentication)
REST_FRAMEWORK = dict( ... DEFAULT_AUTHENTICATION_CLASSES=( 'mozilla_django_oidc.contrib.drf.OIDCAuthentication', 'rest_framework.authentication.SessionAuthentication' ... ) )
-
在使用Django-rest-framework时,覆盖InAuthGroup权限类以实现基于角色的访问控制
from keycloak_oidc.drf.permissions import InAuthGroup class InTestAuthGroup(InAuthGroup): """ A permission to allow access if and only if a user is logged in, and is a member of the 'test' role inside keycloak. """ allowed_group_names = ['test']
-
将keycloak-oidc URLconf包含在你的项目urls.py中
url(r'^oidc/', include('keycloak_oidc.urls')),
-
重要:请务必阅读Mozilla Django OIDC文档:https://mozilla-django-oidc.readthedocs.io/en/stable/installation.html
所有可配置的设置都在那里有文档说明。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
哈希值 for datapunt_keycloak_oidc-0.5.1-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4a0d1f84985f61edc1a13276e98edbf83498e51462f7e9be2cf6dc130738985e |
|
MD5 | 5aee54443395f8ef2fefb598b145ac5b |
|
BLAKE2b-256 | bccf620fd46c7e73cb18b2dee903d604b8b5867a14fa9689d50134db4267356c |