2.2.3. 带有 Cordova 的混合应用程序
Keycloak 支持使用 Apache Cordova 开发的混合移动应用。JavaScript 适配器有两种模式: cordova 和 cord :
ova -native
默认为 cordova,如果尚未配置任何适配器类型且有 window.cordova,则适配器将自动选择。登录后,它将打开一个 InApp Browser,允许用户与 Red Hat Single Sign-On 交互,然后通过重定向到 http://localhost 来返回应用程序。因此,您必须在 Admin Console 的客户端配置部分中将此 URL 列为有效的 redirect-uri。
虽然这个模式易于设置,但它也会有一些缺点:
- InApp-Browser 是嵌入在应用程序中且不是手机的默认浏览器。因此,它将有不同的设置,存储的凭证将不可用。
- InApp-Browser 可能也很慢,特别是在渲染更复杂的它们时。
- 在使用这种模式前,需要考虑安全性问题,例如,应用程序可以获取用户凭证的访问权限,因为它可以完全控制浏览器渲染登录页面,因此不允许在不信任的应用程序中使用。
使用此示例应用程序帮助您开始使用 :https://github.com/keycloak/keycloak/tree/master/examples/cordova
替代模式 cordova-native 采用不同的方法。它使用系统浏览器打开登录页面。用户通过身份验证后,浏览器使用特殊 URL 重新重定向到应用。在那里,Red Hat Single Sign-On 适配器可以通过从 URL 读取代码或令牌来完成登录。
您可以通过将适配器类型 cordova-native 传递给 init 方法来激活原生模式:
keycloak.init({
adapter: 'cordova-native'
})
这个适配器需要两个额外的插件:
- Cordova-plugin-browsertab: 允许应用程序在系统的浏览器中打开网页
- Cordova-plugin-deeplinks :允许浏览器通过特殊 URL 重新重定向到您的应用程序
链接到每个平台上的应用程序的技术详情需要特殊设置。有关更多说明,请参阅 deeplinks 插件文档中的 Android 和 iOS 部分。
打开应用程序的不同链接:自定义方案(例如 myapp://login 或 android-app://com.example.myapp/https/example.com/login)和 Universal Links (iOS)/ Deep Links (Android)。虽然前者易于设置,并且通常更可靠地工作,但以后会提供额外的安全性,因为它们是唯一的,并且只有域的所有者可以注册它们。在 iOS 上已弃用 custom-URL。我们建议您使用通用链接,将回退站点与 custom-url 链接结合使用,以获得最佳可靠性。
另外,我们推荐以下步骤提高与 Keycloak 适配器的兼容性:
-
iOS 上的通用基础镜像看似更可靠地使用
response-mode设置为查询 -
要防止 Android 在重定向上打开应用程序新实例,请将以下代码片段添加到
config.xml中:
<preference name="AndroidLaunchMode" value="singleTask" />
有一个 app 示例,它演示了如何使用 native-mode: https://github.com/keycloak/keycloak/tree/master/examples/cordova-native