В нашей текущей ситуации наше веб-приложение (SP) уже интегрировало SSO с использованием расширения Spring Security SAML. Наш продукт является SaaS, и у нас есть разные клиенты, у которых могут быть разные IDP (Identity Providers), настроенные с их конца. Теперь мы пытаемся предоставить поддержку SSO нашему мобильному приложению.
После некоторого поиска я столкнулся с тремя возможными решениями, которые я мог бы реализовать:
1) Использование веб-представления. Когда SAML включен для клиента, мобильное приложение будет вставлять веб-представление, которое отображает страницу входа IDP при открытии мобильного приложения. Будет удалено URL-адрес на стороне SP, который приведет к перенаправлению SAML обратно в IDP. Таким образом, веб-просмотр будет выполнять инициированный SP-поток входа. Однако, поскольку веб-просмотр не использует пространство для файлов cookie, пользователь должен войти в приложение, каждый раз, когда приложение убито или сеанс истекает. Кроме того, поскольку webview не является браузером, я читал, что он не может обрабатывать крайние случаи во время перенаправления HTTP.
2) Использование приложения Native SSO. IDP обычно предоставляют собственное приложение SSO, в котором мобильное приложение может войти в IDP. Мобильное приложение может взаимодействовать с собственным приложением IDP через SDK, предоставленные соответствующим IDP. Но поскольку наше мобильное приложение должно поддерживать SSO для многих ВПЛ, если мы будем следовать этому подходу, нам, возможно, придется интегрироваться с несколькими Native SSO-приложениями для каждого IDP. Я не уверен, что это правдоподобно в нашем сценарии
3) Использование OAuth и SAML. Третий вариант - добавить поддержку OAuth в наше мобильное приложение. IDP, такие как Salesforce, поддерживают OAuth для авторизации мобильных приложений, но я не уверен, поддерживают ли все IDP OAuth и насколько сложно реализовать OAuth и SAML для мобильных приложений.
Может ли кто-нибудь сказать мне, какой подход предпочтительнее в приведенном выше сценарии, или есть ли какие-то лучшие подходы, которые я не рассматривал? Любые предложения?
Большое спасибо!