Реализация 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),
]