我正在寻找一个解决方案-对SAML IDP进行身份验证的移动应用程序用户,并有一些基本的查询(我是SAML的新手,OAuth:))在这个场景中,流程可以是这样的:移动用户将通过IDP进行身份验证,由IDP生成的SAML响应被发送给服务提供者(通过移动浏览器- Webview)。然后,服务提供商将创建一个令牌,该令牌将被移动应用程序用于后续调用。这种理解正确吗?
另外,移动用户如何在IDP上进行身份验证,我的意思是,相应的IDP应该支持移动应用程序吗?IDP的登录界面会在手机上看到吗?
在我的应用程序中,目前,移动(Rest api)用户根据其应用程序在数据库中的凭据进行身份验证。但现在桌面应用程序正在将SAML用于身份验证。因此,移动用户需要针对SAML IDP进行身份验证。
提前感谢!
是的,你的理解是正确的。为了在移动客户端使用SAML IDP,您需要经历与普通客户端相同的过程(SP和IDP之间的AuthnRequest -> Response交换)。整个流程看起来像这样:
- 您的移动应用程序打开WebView,它访问您的SP的公共URL
- 您的SP通过使用AuthnRequest向SAML IDP发送重定向来启动IDP认证
- 用户在IDP的UI内进行身份验证(应该能够为移动客户端正确渲染,因为它使用移动客户端打开)
- IDP重定向回您的SP并返回响应
- 您的SP应用程序处理响应并生成可用于Rest api的令牌
- SP将令牌通信回移动应用程序(例如使用WebViewClient + onPageFinished + cookies,或调用对象提供的addJavascriptInterface,或任何你已经使用)
与通常的带有idp的移动身份验证相比(例如对Facebook/Google使用OAuth 2), SAML更复杂。使用OAuth 2.0,可以很容易地提取授权令牌并通过使用自定义URL方案拦截响应,而不需要web部署(SP)组件。由于SAML不支持类似于Oauth中的"隐式"流(出于安全原因),而且SAML响应的处理要复杂得多(由于XML签名、XML加密等),因此在使用SAML时,这种方法是不可行的。