Реализация Python Django ModelViewSet с SAML ACS

В текущей системе с унаследованным IAM мы реализовали класс, унаследованный от ModelViewSet, с функциями входа и выхода. В унаследованном IAM для выхода из системы не обязательно получать name_id и session_index. Поэтому мы можем обойти acs (он же assertion_consumer_service) для получения этой информации и сразу перейти к выходу.

Сейчас развернута новая система IAM, и нам нужно расширить текущую реализацию для поддержки входа и выхода (вместе с acs). name_id и session_index должны быть предоставлены в LogoutRequest. Учитывая, что у нас есть разные наборы URL для

  1. вход/выход: https://example.com/saml2/account/[login|logout]
  2. acs: https://example.com/saml2/sso/acs

Как обновить следующий код для поддержки обратного вызова из acs, чтобы мы могли сохранить name_id и session_index?

urls.py

router = DefaultRouter()
router.register("saml2/account", Saml2AccountView, basename="account")
urlpatterns = [
    url("", include(router.urls)),
]

views.py

class Saml2AccountView(viewsets.ModelViewSet):
    @action(detail=False, methods=['get'])
    def login(self, request, *args, **kwargs):
        # implement the login function

    @action(detail=False, methods=['get'])
    def logout(self, request, *args, **kwargs):
        # implement the logout function

ПРИМЕЧАНИЕ: Мы используем https://pypi.org/project/django-saml2-auth/ для реализации SAML с логином/выходом.

Попробуйте добавить следующий метод в класс Saml2AccountView:

class Saml2AccountView(viewsets.ModelViewSet):
    @action(detail=False, methods=['get'])
    def acs(request, *args, **kwargs):
        # implement the acs function

И добавьте следующее в urls.py:

urlpatterns = [
    path("saml2/account", Saml2AccountView.acs),
]
Вернуться на верх