延迟后刷新时插件身份验证不会自动完成

2024-03-07

我为 Banno Mobile & Online 构建了一个插件,并且 OAuth 身份验证几乎适用于所有情况。然而,在移动应用程序的正常使用过程中,用户有时会遇到 Banno SSO 登录屏幕,提示他们输入用户名和密码,尽管他们已经登录到平台。当应用程序打开大约 10 分钟以上时,就会发生这种情况。我还注意到,这种情况仅发生在某些会刷新显示插件的仪表板的操作中。我根据行为将操作分为三类:

  1. 不会导致插件重新加载:

    • 向下拖动屏幕/“刷新”仪表板手势
    • 暂停应用程序并重新打开
    • 锁定/解锁手机
  2. 使用插件设置提供的 URL 重新加载插件

    • 使用侧边栏菜单(“汉堡包”图标)离开仪表板并返回
    • 注销并重新登录
    • 完全关闭应用程序
  3. 使用之前加载的 URL 重新加载插件

    • 水平/垂直旋转屏幕
    • 选择仪表板项目(例如转移),然后“返回”导航至仪表板

类型 2 中的操作将成功加载插件,无论应用程序打开后已经过了多长时间。然而,类型3更复杂。它似乎在第一次完全验证后重新使用它“最终”到达的任何 URL。例如,当它首次加载(已完成身份验证)时,它将“最终”到达包含身份验证代码 A 的 URL。如果使用类型 3 操作重新加载,应用程序将向包含代码的 URL 发送请求A. 根据 OAuth 设计,它将无法进行身份验证,我们的插件将重新初始化身份验证过程 - 最终重定向到带有身份验证代码的新 URL B. 如果再次通过类型 3 操作刷新,应用程序仍会发送请求包含身份验证代码 A 的 URL,而不是最近使用的具有身份验证代码 B 的 URL。看来,无论执行类型 3 刷新多少次并且插件创建新的重定向,应用程序仍将使用该 URL它在第一次加载时就“结束”了。

这种情况仍然会导致插件身份验证成功,但当前的问题是类型 3 刷新将无法在一定时间范围后完成重新身份验证。如上所述,大约 10 多分钟后,当重定向到身份验证服务器时,应用程序将不会自动对用户进行身份验证,而是将 Banno 登录屏幕留在插件窗口内。

我能想到的解决此问题的唯一解决方案是确保初始身份验证“结束”于可用于无限期显示插件内容的 URL。这意味着建立一个单独的系统来验证类型 3 操作后来自应用程序的请求是否是显示客户信息的有效请求。任何有关如何处理这种情况的建议将不胜感激。


Banno Apps 中的插件是嵌入式 Web 应用程序。在 Banno Online 中,这是一个 iframe,在 Banno Mobile 中,这是一个嵌入式 webview。虽然这两种情况略有不同,但您描述的问题仍然相同。

插件页面可以随时刷新。没有办法阻止这种行为。编写良好的插件将在这些刷新之间保持其状态,以便用户甚至不会注意到。

保持页面状态的一部分是保持身份验证数据。用于初始验证用户身份的 OAuth 流程并不打算在每次页面刷新时使用。嵌入式 Web 应用程序预计将保持其自己的身份验证状态。如何完成此操作通常取决于嵌入式 Web 应用程序所使用的语言和平台。然而,所有策略几乎都使用 cookie,该 cookie 在应用程序关闭时会被销毁。

由于用于初始 OAuth 切换的身份验证在一段时间后过期,因此此时进一步尝试利用 OAuth 流程确实会向用户显示登录页面。通过在应用程序中保留一个会话,并具有自己独特的超时时间,并通过用户活动延长该超时时间,这种情况很少会发生。

您必须决定身份验证 cookie 的有效期限。检测您的身份验证 cookie 是否已过期并向用户显示一个特殊的错误页面,要求他们重新加载应用程序可能是值得的。

我能想到的解决此问题的唯一解决方案是确保初始身份验证“结束”于可用于无限期显示插件内容的 URL。这意味着建立一个单独的系统来验证类型 3 操作后来自应用程序的请求是否是显示客户信息的有效请求。

你在这里完全正确。一旦将代码交换为访问令牌,就应该重定向带有身份验证代码的 Oauth 回调 URL。从那时起,您的应用程序应该使用自己的身份验证机制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

延迟后刷新时插件身份验证不会自动完成 的相关文章

  • Python 根据另一个列表对一个列表进行排序

    我有两个列表 第一个列表是键顺序 第二个列表是元组列表 colorOrder red blue yellow green tupleList 111 red 222 pink 333 green 请注意 这两个列表不是一对一的关系 有些颜色
  • 从表中显示 MySQL 数据的 C++executeQuery() 错误

    我需要一些帮助 我有这段代码 如下 将数据添加到 MySQL 表 然后返回同一个表 代码运行良好 当我运行它时 它将列添加到 MySQL 表中 但它停止了 并出现错误 SQL error Error message 字面意义上的空白 如果我
  • C 为什么函数指针作为参数而不是仅仅作为函数?

    我一直在阅读有关以函数作为参数的函数 特别是在 C 中 它们使用函数指针 假设我想实现牛顿拉夫森方法 以简单的方式 来计算非线性方程中的零点 double derivative double f double double x double
  • 如何在 React 中播放 blob 对象的音频?

    我正在尝试使用 ReactJS 创建一个录音机应用程序 我使用了 npm 包反应麦克风 https www npmjs com package react mic服务于目的 但录音被保存为blob object 如何在浏览器中播放录制的文件
  • 断言可以用在常量表达式中吗?

    The assert 宏来自
  • 使用 Knockout 将任何键(通过键码)绑定到操作

    我正在寻找一种方法将许多不同的键绑定到我的视图模型中的不同操作 功能 我找到了这个example http geekswithblogs net michelotti archive 2011 10 11 knockoutjs custom
  • 如何在 Python 中交错字符串? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何在 Python 中交错字符串
  • ANT 有没有一种方法可以从 JAR 中提取一个类文件并将其放入另一个 JAR 中?

    我的 ANT 构建脚本使用名为 createEJBStubs 的 WebSphere 命令 该命令生成一个 JAR 文件 其中包含所有内容以及一个新生成的类 即 com myapp services User Service Stub cl
  • 批处理脚本 - 对目录中的每个文件运行命令

    我需要将一些 xls 文件转换为 xlsx 文件 我可以通过在 cmd 提示符 Windows 中运行以下命令成功地将一个 xls 文件转换为 xlsx ssconvert inputFileName xls outputFileName
  • 由于新的 couchbase 安装,将数据恢复到 couchbase

    我们有一个 couchbase 服务器 不知何故进行了全新安装 并且我们在那里的所有数据都丢失了 我已经设法备份了 opt couchbase var lib couchbase data 现在 当我尝试将数据复制回来时 它没有显示 cou
  • 自动选择毒理学部分中的平台(或其他)条件

    我想专门运行某个有毒部分 然后在特定平台上自动决定 如果我刚刚运行 下面的示例代码片段可以正常工作tox e ALL 然后平台条件可以很好地找出正确的平台 然而 我想only地址并运行特定部分 例如类似的内容tox e other not
  • 如何使用 C# 裁剪图像

    我有一张用相机拍摄的文档照片 现在我要做的就是从该图像中仅裁剪文档 请任何人建议我如何最好地做到这一点 或者首先是否可能 Edit 欲了解更多信息 我的下一个问题如何获取图像的边缘坐标 https stackoverflow com que
  • Bittorrent 协议如何处理数据块?

    BitTorrent 协议中如何处理数据块 当客户想要下载时 例如Linux 发行版中 跟踪器是否返回对等点列表 然后客户端连接到该列表并向每个对等点请求块 或者跟踪器是否返回对等点列表以及哪个对等点具有哪些数据的信息 数据块在哪里管理或处
  • 多维动态数组中什么需要最终确定?

    我经常使用动态数组 并且对 SetLength 和 Finalize 过程没有任何问题 我最近有理由使用动态数组 其中每个数组元素本身可以包含可变数量的元素 声明是这样的 TScheduleArray array of array of a
  • 使用 Sharepoint Word Automation 进行文本替换

    我正在使用 sharepoint 2010 我想做的是采用一个 word 文档模板 对几个关键字进行替换 例如 替换 ClientID 与客户端的 ID 并以特定名称将其保存在共享点上的库中 我已经弄清楚如何使用 word interop
  • ASP.NET登录页面问题

    Q The login page是任何网站的起点 也是验证用户身份的最重要的事情 当我开始构建任何网络应用程序时 我花了很多时间思考如何设计一个具有灵活界面且安全的登录页面 我的问题是 Is当我开始构建这个特殊页面时 有任何常见的建议 提示
  • TeamCity 中的“dotnet 恢复”与“nuget 恢复”

    我有一个 ASP NET Core 项目 可以使用 Visual Studio 正确构建 但不能在 MSBuild 下构建 它没有找到所有公共库 系统等 我正在使用 TeamCity 构建过程的一部分是nuget restore 我尝试执行
  • JSF:为支持 bean 中的属性创建别名

    我指的是 EL 中相当深的对象层次结构和相当神秘的名称 如下所示 myBean configBaseStack excludeMethodFromAccounting method TimeoutBehaviorEnabled 我想通过别名
  • 如何在 SharedPreferences 中存储 ArrayList> ?

    我希望在 SharedPreferences 中存储一个包含 Hashmap 的 ArrayList 我怎样才能做到这一点 您可以将集合转换为 json 并将其存储在共享首选项中 每当您需要获取数据时 只需获取字符串并将 JSON 转换回您

随机推荐

  • 哈希表。命名历史。为什么不用哈希表呢?

    we know ArrayList LinkedList TreeMap 以及其他 以及所有名称均采用 CamelCase 格式 但为什么Hashtable not HashTable 这是一个无原则的问题 只是想知道 Hashtable是
  • 当前枚举命名空间中的全局变量的首选方法是什么?

    我曾经为此查看 G 的源代码 但最近 Intersystems 已停止分发 INT 代码 我想理论上我可以在循环中使用 eXecute 语句来检查每个合法全局名称上的 D 但这是愚蠢且不合理的慢 那么目前正确的做法是什么 您始终可以在中使用
  • 如何从 Visual Studio 文件搜索中排除 Designer.cs

    在 Visual Studio 2005 8 中进行搜索时 是否有办法排除特定类型的 cs 文件 Example 在重构场景中 我可能会搜索以识别代码中的字符串文字 以便我可以将它们重构为常量或类似内容 但是 designer cs 文件充
  • 我可以将 WidgetKit 扩展添加到目标 iOS < 14 的应用程序中吗?

    我想向我的 iOS 应用程序添加一个 WidgetKit 小部件 应用程序本身应保持 14 的设备上可用 但应用程序也应在所有其他设备上运行 这可能吗 是的 您可以 因为我在 iOS13 Xcode 项目上开发小部件 您可以在运行 iOS1
  • Pandas - 如何将样式数据框保存到图像

    我已经设计了数据帧输出的样式 并让它在 Jupyter Notebook 中显示我想要的方式 但我遇到问题 找不到一种将其保存为图像的好方法 我努力了https pypi org project dataframe image https
  • 如何对子目录内的服务进行 GRPC 调用? (在.Net框架中)

    我正在尝试连接到 NetFramework 4 5 Windows 应用程序中的 gRPC 服务 我目前正在使用元包 nuget Grpc 我知道它现在仅处于维护模式 我需要访问不在主机 端口位置但有子路径 子目录的服务 我的服务位于这里
  • 如何知道设备是左横向还是右横向?

    我的应用程序有一个浮动搜索视图 https github com arimorty floatingsearchview占据屏幕的全宽 当方向为横向时 它会位于导航栏后面 因此我想为其添加一些边距 问题是 当我旋转左横向 右侧导航栏 时 浮
  • SQL Server 到 MySQL 数据传输

    我正在尝试将批量数据从 SQL Server 数据库恒定且连续地传输到 MYSQL 数据库 我想使用 SQL Server 的 SSMS 复制 但这显然仅适用于 SQL Server 到 Oracle 或 IBM DB2 的连接 目前 我们
  • Select2:无法创建长度超过 2 个字符的新选项(标签:true)

    我有一个 Select2 框 启用了标记以添加新的自己的标签 选择现有选项 任何长度 都没有任何问题 但有些代码阻止我添加长度超过 2 个字符的新选项 只是无法添加更多字符 请参阅JSFiddle https jsfiddle net rq
  • 预检响应中的 Access-Control-Allow-Methods 不允许方法 DELETE

    我正在尝试发出 DELETE ajax 请求 但似乎无法使其工作 当我使用 POSTMAN 制作它时 它可以工作 这是我的代码 这是我的请求 使用 jQuery 的 ajax 方法发出 ajax url imageUrl type DELE
  • 生成器表达式和生成器函数之间的区别

    生成器表达式和生成器函数之间有什么区别 性能或其他方面 吗 In 1 def f yield from range 4 In 2 def g return i for i in range 4 In 3 f Out 3
  • 如何在 Netbeans 中打开检查器组?

    我使用的是 netbeans ide 7 1 1 所有组都是开放的 我找不到检查组 我打开了导航器组 打开了文件 调色板 程序和导航器组 我需要检查组 问题在于 NetBeans 7 1 1 已将检查器组重命名为 Navigator 以前
  • 在 cookie 中存储和检索 json 对象

    我尝试将 json 对象存储在 cookie 中 但遇到了一些问题 我可以像这样创建我的对象 product name prodname quantity 4 然后我将这个对象保存在我的 cookie 中 随着更多产品的添加 它是一个购物篮
  • 账户之间的 Coinbase 转账返回“未找到”

    我正在尝试在账户之间转移 BTC 和 BCH 通过查看文档 我发现了以下内容 https developers coinbase com api v2 transfer money Between accounts https develo
  • 部署后无法访问 WCF 服务中的 SVC 文件

    我此刻泪流满面 我还能做些什么来排查和分析问题 我已经部署了 WCF 服务层 但无法访问它 在 SVC 文件上传到的同一物理目录中 我还放置了一个静态 HTML 文件 第一行获取该文件 而第二行则抱怨资源被删除 重命名 不可用等 http
  • OSX 10.7.5:致命错误:找不到“ft2build.h”文件

    我正在尝试安装一个名为 ROOT 的程序 http root cern ch drupal content installing root source http root cern ch drupal content installing
  • Cypress - if then 函数

    我对赛普拉斯有疑问 我的页面上有一个元素并不总是出现 什么时候显示 什么时候不显示 没有任何逻辑 在 Cypress 中 是否有一些 IF THEN 函数或其他函数 如何检查元素是否显示 因此填充它 当您没有看到它时 如何跳过该步骤 我的代
  • 子查询连接和where中的可见性差异

    我在简单连接时遇到了问题 SELECT FROM worker wo WHERE EXISTS SELECT wp id working place FROM working place wp JOIN working place work
  • 如何从已完成的“NSURLSessionDataTask”获取数据?

    我知道我可以使用dataTaskWithURL completionHandler 获取completionHandler 块中的数据 但这会阻止委托方法触发 我需要didReceiveData 触发方法 因为这是我配置进度指示器的方式 我
  • 延迟后刷新时插件身份验证不会自动完成

    我为 Banno Mobile Online 构建了一个插件 并且 OAuth 身份验证几乎适用于所有情况 然而 在移动应用程序的正常使用过程中 用户有时会遇到 Banno SSO 登录屏幕 提示他们输入用户名和密码 尽管他们已经登录到平台