跳转到主要内容

一个简单的Django应用程序,用于通过OIDC使用keycloak

项目描述

Keycloak OIDC

Keycloak OIDC是一个简单的Django应用程序,它封装了mozilla_django_oidc应用程序,并实现了我们在Datapunt使用的Keycloak身份验证方式。

它创建和更新用户,并根据keycloak提供的信息设置他们的电子邮件、用户名和姓氏,并根据keycloak角色管理组成员资格。

快速入门

  1. 使用pip安装

    pip install datapunt_keycloak_oidc
    
  2. 将 "keycloak-oidc" 添加到您的 INSTALLED_APPS(确保在auth之后加载!)

    INSTALLED_APPS = [
        ...
        'django.contrib.auth',
        'keycloak_oidc',  # load after auth!
    ]
    
  3. 将 mozilla_django_oidc.SessionRefreshMiddleware 添加到您的 MIDDLEWARE(涉及会话和身份验证的中间件必须最先添加!)

    MIDDLEWARE = [
        ...
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'mozilla_django_oidc.middleware.SessionRefresh',
    ]
    
  4. 将 OIDCAuthenticationBackend 添加到 AUTHENTICATION_BACKENDS

    AUTHENTICATION_BACKENDS = [
        'keycloak_oidc.auth.OIDCAuthenticationBackend',
        ...
    ]
    
  5. 在 settings.py 中导入默认的 OIDC 设置。这些默认值在大多数情况下都会工作。

    # Import from keycloak_oidc settings and use the defaults
    from keycloak_oidc.default_settings import *
    
  6. 在 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(或任何其他端口)。

  7. 将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')
    
  8. 当使用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'
            ...
        )
    )
    
  9. 在使用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']
    
  10. 将keycloak-oidc URLconf包含在你的项目urls.py中

    url(r'^oidc/', include('keycloak_oidc.urls')),
    
  11. 重要:请务必阅读Mozilla Django OIDC文档:https://mozilla-django-oidc.readthedocs.io/en/stable/installation.html

所有可配置的设置都在那里有文档说明。

项目详情


下载文件

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

源代码分发

datapunt-keycloak-oidc-0.5.1.tar.gz (13.0 kB 查看哈希值)

上传时间 源代码

构建分发

datapunt_keycloak_oidc-0.5.1-py3-none-any.whl (15.4 kB 查看哈希值)

上传时间 Python 3

由以下支持