如何在 Xamarin Forms App 中实现 SSO?
Posted
技术标签:
【中文标题】如何在 Xamarin Forms App 中实现 SSO?【英文标题】:How to implement SSO in Xamarin Forms App? 【发布时间】:2021-11-05 19:51:26 【问题描述】:我正在尝试在我的应用程序(Xamarin.Forms 应用程序 - ios 和 android)中实现 SSO 功能。登录流程是:当用户打开登录页面时,她/他将看到一个按钮作为使用 sso 登录。如果用户选择此按钮,应用程序将为 sso 打开一个 webview,当 sso 身份验证完成时(它适用于 airwatch 等 mdm 解决方案),返回一个 SAML 令牌。
我的问题是如何实现这一点,如何从 webview 捕获 saml 令牌?实际上,在 xamarin 中有一种方法可以解决此问题,因为我在 xamarin 进化会议中看到了一个视频: https://www.youtube.com/watch?v=AAAQJgBDK0w&t=1163s
当 AuthTpye 设置为“SAML”(在视频 15:51 秒中)并且在 webview 上使用 airwatch sso 打开应用程序登录时(在视频 16:45-17:14 秒中),用户可以使用 sso 登录。但我只能找到这个视频。我找不到此实现的任何其他来源。
此外,我看到了一些 Stack Overflow 问题,他们的回答说使用 Xamarin.Auth nuget 包。但 Xamarin.Auth 使用 oauth2.0 协议。我需要为 sso 使用 saml 协议。
我该怎么做?
【问题讨论】:
恐怕你还有很多工作要做。前段时间我们也遇到同样的情况,最后还是自己实施最多。我们使用了 OpenId 库,但仍有很多事情要做。库:github.com/IdentityModel/IdentityModel.OidcClient。我们自己实现了 ChromeCustomTabsBrowser 并使用 HttpClient 检索了 SAML Token。 感谢@this.myself 的回复 是的,这是一项艰巨的任务,但我从 vmware 找到了一个来源:github.com/vmware/idm/wiki/Single-sign-on-for-Mobile 首先,我认为我必须仅使用 saml 协议来实现移动设备。但是有一种方法可以使用 oauth2 协议来实现。它只是一个带有一些配置的发布请求。所以我决定使用它,但我还没有实现它。我会试试这个。 【参考方案1】:Xamarin.Essentials 有一个名为“WebAuthenticator”的类,对您有很大帮助。
文档可以在这里找到:https://docs.microsoft.com/en-us/xamarin/essentials/web-authenticator?tabs=android
它使过程非常简单。您只需发送登录请求:
var authResult = await WebAuthenticator.AuthenticateAsync(loginUrl, responseUrl);
“authResult”变量将保存您的令牌和声明。
您还需要实现一个活动或方法(取决于平台)来处理您在上述代码中作为“responseUrl”传入的自定义 URL,并将响应转发回 Xamarin.Essentials 库。我强烈建议您阅读上面链接的文档。他们很有帮助。
【讨论】:
感谢您的回复。它与 saml 协议兼容吗?据我所知,使用 oauth 协议做了一个例子。但我需要用 saml 协议解决它。如果它与 saml 兼容,那就太好了。 好问题。我想我只用oauth尝试过。 saml 协议使用 XML 而不是 JSON,对吗?如果库不支持它,您也许可以在自定义活动中拦截返回消息并以库理解的方式对其进行格式化?否则,也许 MSAL(Microsoft 身份验证库)可以工作? 我还不能测试,但也许 msal 可以解决这个问题。谢谢。以上是关于如何在 Xamarin Forms App 中实现 SSO?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用依赖注入在 Xamarin.Forms 中实现 Flyoutnavigation
如何在 Xamarin Forms 中实现标记聚类(谷歌地图)
如何使用 Visual Studio for Mac 在 Xamarin.Forms 中实现多目标?