Какое лучшее решение SSO для родного мобильного приложения, которое может поддерживать несколько IDP?

В нашей текущей ситуации наше веб-приложение (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 для мобильных приложений.

Может ли кто-нибудь сказать мне, какой подход предпочтительнее в приведенном выше сценарии, или есть ли какие-то лучшие подходы, которые я не рассматривал? Любые предложения?

Большое спасибо!

Ответ 1

Для мобильных приложений я считаю, что OAuth2 или OpenID Connect предпочтительнее, чем SAML. Они отлично работают с мобильными решениями.

У них также есть понятие обратного канала для связи с сервером аутентификации. Это означает, что вы можете безопасно запускать браузер устройства по умолчанию, чтобы выполнить вход и извлечь выгоду из файлов cookie в этом. Как только пользователь выполнит аутентификацию в браузере, приложение получит токен по обратному каналу, где он вызывает сервер auth.

Если у вас есть только Idps SAML, опция должна использовать сервер идентификации для выполнения перевода, который действует как SAML2 SP и сервер OAuth.