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' 9 months ago
sso_client Fix redis response decoding 10 months ago
tests Fix test 10 months ago
.gitignore Fix test 10 months ago
Pipfile Fix test 10 months ago
Pipfile.lock Fix test 10 months ago
README.md Added issuer config 10 months ago
setup.py Update 'setup.py' 9 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)
...