Реализация Python Django ModelViewSet с SAML ACS
В текущей системе с унаследованным IAM мы реализовали класс, унаследованный от ModelViewSet, с функциями входа и выхода. В унаследованном IAM для выхода из системы не обязательно получать name_id и session_index. Поэтому мы можем обойти acs (он же assertion_consumer_service) для получения этой информации и сразу перейти к выходу.
Сейчас развернута новая система IAM, и нам нужно расширить текущую реализацию для поддержки входа и выхода (вместе с acs). name_id и session_index должны быть предоставлены в LogoutRequest. Учитывая, что у нас есть разные наборы URL для
Как обновить следующий код для поддержки обратного вызова из 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),
]