android - Ionic Angular OIDC 客户端身份验证问题
问题描述
我有一个我正在开发和部署在安卓设备上的离子应用程序。我在应用程序中使用 angular-auth-oidc-client 进行用户身份验证。这是我的配置: 注意:为简洁起见,省略了 sts server 和 clientId,它们不相关。
scope: 'openid profile tino_access',
silentRenewUrl: `${window.location.origin}/silent-renew.html`,
responseType: 'code',
postLogoutRedirectUri: window.location.origin,
silentRenew: true,
silentRenewUrl: `${window.location.origin}/silent-renew.html`,
logLevel: LogLevel.Warn,
postLoginRoute: window.location.origin,
useRefreshToken: true,
我确信一切都已正确设置,因为在网页上访问我的移动应用程序时一切正常,并且身份验证正常进行。但是,在移动设备上部署时(来源是 localhost),在访问 Keycloak 登录页面并正确输入登录凭据后,会向 STS 服务器发出请求以验证令牌。我需要将其发送到服务器,但我希望我的应用程序在 localhost 域上运行。如果我将 redirectUrl 正确设置为服务器,那么它可以工作,但应用程序不再是本地应用程序,它只是网页的镜像。
我可以看到这是一些用于存储和检查会话令牌的机制,但很清楚为什么它不能在移动设备上运行。有谁知道可能的解决方案/解决方法?
谢谢
解决方案
Web 和移动 OAuth 之间存在差异,总结如下:
- Web UI 登录使用与呈现普通视图相同类型的浏览器窗口,使用 HTTPS 回调 URL
- 移动应用登录使用系统浏览器的一种形式来触发登录,并且通常使用自定义 URL 方案来接收响应
一些技术栈尝试对 Web 和移动设备使用相同的解决方案。这可能在渲染方面有效,但在 OAuth 方面无效。相反,对于移动应用程序,您需要遵循原生应用程序的 OAuth指南。
移动解决方案通常称为 AppAuth 模式。要在 Android 上开始使用它,可以从我的Android AppAuth Sample Page开始。
推荐阅读
- asp.net-core - Blazor:如何获取托管服务实例?
- html - 内联列表中的空格项
- android - 使用 Intent 打开 Hik-Connect
- javascript - 用于操作 CSS 自定义属性的 JavaScript 函数在 $(window).resize() 上不起作用
- google-apps-script - 更改 googlescript 中文件夹的名称?
- scala - sbt complie 上的 scala 中的 log4j2 给出了未解决的依赖关系路径
- javascript - 如何使用javascript更改另一个页面上的信息
- ruby-on-rails - 错误的 URI(不是 URI?):'redis://redis.xxx.ng.0001.apse1.cache.amazonaws.com:6379/1' URI::InvalidURIError Rails with aws redis
- html - 如何使用可变文本基线垂直对齐项目
- javascript - 在jQuery中按数据事件日期对div进行排序