You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Sergey Zhuplev dfe19d3357 Update 'setup.py' 6 months ago
sso_client Fix redis response decoding 7 months ago
tests Fix test 7 months ago
.gitignore Fix test 7 months ago
Pipfile Fix test 7 months ago
Pipfile.lock Fix test 7 months ago
README.md Added issuer config 7 months ago
setup.py Update 'setup.py' 6 months ago

README.md

Использование JWTAuthentication

Добавить RemoteUserBackend в список бекендов аутентификации

AUTHENTICATION_BACKENDS = [
    ...
    'django.contrib.auth.backends.RemoteUserBackend'
]

Добавить JWTAuthentication в классы аутентификации Rest Framework

REST_FRAMEWORK = {
        ...
        'DEFAULT_AUTHENTICATION_CLASSES': (
            ...
            'sso_client.authentication.JWTAuthentication',
        ),
    }

Класс JWTAuthentication можно расширить чтобы изменить детали авторизации. Для этого можно переопределить методы authenticate_user и post_authenticate.

В настройках добавить следующее:

SSO_HOST = os.getenv('SSO_HOST', 'http://0.0.0.0:8080')
SSO_ACCESS_KEY = os.getenv('SSO_ACCESS_KEY', 'test_access_key')
SSO_ACCESS_TOKEN = os.getenv('SSO_ACCESS_TOKEN', 'test_access_token')
SSO_STORAGE = <JWTStorage instance>
SSO_ISSUER = 'some_service_name'

Соответственно сервис должен быть зарегистрирован с данными учетными данными в SSO сервисе.

В качестве SSO_STORAGE можно использовать любой класс удовлетворающий интерфейсу sso_client.storage.JWTStorage.
В пакете доступно два готовых класса:

  • DumbJWTStorage - не содержит никакого функционала, клиент SSO будет каждый раз обращаться за JWT к сервису
  • RedisJWTStorage - использует в качестве хранилища ключей Redis

Пример использования RedisJWTStorage:

...
REDIS_CLIENT = Redis.from_url(REDIS_URL)
SSO_STORAGE = sso_client.storage.RedisJWTStorage(REDIS_CLIENT)
...