3.6. 带有 Cordova 的混合应用程序
红帽构建的 Keycloak 支持通过 Apache Cordova 开发混合移动应用程序。该适配器有两种模式: cordova
和 cordova-native
:
默认为 cordova
,如果未明确配置适配器类型,并且存在 window.cordova
,则适配器会自动选择。登录时,它会打开一个 InApp 浏览器,允许用户与红帽构建的 Keycloak 交互,之后通过重定向到 http://localhost
来返回到应用程序。由于此行为,您可以在 Admin Console 的客户端配置部分中将此 URL 列为有效的 redirect-uri。
虽然这个模式易于设置,但也有一些缺点:
- InApp-Browser 是嵌入在应用程序中的浏览器,不是手机的默认浏览器。因此,它具有不同的设置,存储的凭据将不可用。
- InApp-Browser 可能也较慢,特别是在渲染更复杂的主题时。
- 在使用此模式前需要考虑安全问题,例如,应用程序可以访问用户的凭证,因为它完全控制浏览器的登录页面,因此不允许其在不受信任的应用程序中使用。
备用模式是"cordova-native",采用不同的方法。它使用系统浏览器打开登录页面。用户通过身份验证后,浏览器使用特殊 URL 重定向到应用。从那里,红帽构建的 Keycloak 适配器可以通过从 URL 读取代码或令牌来完成登录。
您可以通过将适配器类型 cordova-native
传递给 init ()
方法来激活原生模式:
await keycloak.init({ adapter: 'cordova-native' });
await 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
。 - 通用链接(iOS) / Deep Links (Android).
虽然前者更容易设置,而且往往能够更可靠地工作,但后者会提供额外的安全性,因为它们是唯一的,并且只有域的所有者才能注册它们。custom-URLs 在 iOS 中已弃用。为获得最佳可靠性,我们建议您将通用链接与使用 custom-url 链接的回退站点结合使用。
另外,我们建议以下步骤来提高与适配器的兼容性:
-
iOS 上的通用链接看似可以更可靠地工作,并将
response-mode
设置为query
-
要防止 Android 在重定向时打开一个新的应用程序实例,请在
config.xml
中添加以下片断:
<preference name="AndroidLaunchMode" value="singleTask" />
<preference name="AndroidLaunchMode" value="singleTask" />