应用似乎 "lost connection" 与 MobileFirst/backend 服务器

Apps seem to be "lost connection" with MobileFirst/backend server

如果我们让 WL 应用程序在后台运行一段时间,它们似乎会与 MF 服务器失去连接。我认为这可能与 application-descriptor.xml 中定义的功能有关,因为有一个 accessTokenExpiration 属性的值为 3600,并且 MF 服务器记录了以下错误:

[ERROR   ] FWLSE4007E: Received bad token from client. Server token:'46ejj4elqjtg3vrn8j4qaql8es', client token:'2kvma3lscib0h1q5dlu7mak818'. [project Dummy]
[ERROR   ] FWLSE4007E: Received bad token from client. Server token:'k8irk7mftj0j4ostbbba7smqto', client token:'mptvg1t1l4n8e7qfr1ratrcf30'. [project Dummy]
[ERROR   ] FWLSE4007E: Received bad token from client. Server token:'dhfjgut9aku08hcm88rlb9rjo2', client token:'46ejj4elqjtg3vrn8j4qaql8es'. [project Dummy]
[ERROR   ] FWLSE4007E: Received bad token from client. Server token:'mdva1p1nt428oii6nvd91n7vu5', client token:'46ejj4elqjtg3vrn8j4qaql8es'. [project Dummy]
[ERROR   ] FWLSE4007E: Received bad token from client. Server token:'jmbvd7ocaoj4gb709n0b3mh62g', client token:'dhfjgut9aku08hcm88rlb9rjo2'. [project Dummy]
[ERROR   ] FWLSE4007E: Received bad token from client. Server token:'tv1t1blffk8sekc1422oq6s64a', client token:'mdva1p1nt428oii6nvd91n7vu5'. [project Dummy]
[ERROR   ] FWLSE4007E: Received bad token from client. Server token:'sh06en0ihc0i7dvd77fpkrj57s', client token:'jmbvd7ocaoj4gb709n0b3mh62g'. [project Dummy]
[ERROR   ] FWLSE4007E: Received bad token from client. Server token:'6070lc7pafqusf4jslhsh8a49b', client token:'tv1t1blffk8sekc1422oq6s64a'. [project Dummy]
[ERROR   ] FWLSE4007E: Received bad token from client. Server token:'vhds5i92t64pkfn3htdcjr3749', client token:'6070lc7pafqusf4jslhsh8a49b'. [project Dummy]

所以连接过期的时间太短了。我们如何才能在 MobileFirst 和客户端之间创建一个 "remember me" 函数,除非最终用户退出应用程序,否则他们将始终处于登录状态?

您可以在 server\conf\worklight.properties 文件中配置过期令牌。

还有一个 "Remember Me" 教程和示例应用程序,基于 MobileFirst Platform 7.1:https://developer.ibm.com/mobilefirstplatform/documentation/getting-started-7-1/foundation/advanced-topics/remember-me/

会话超时

server\conf\worklight.properties 文件中,查看名为 serverSessionTimeout.

的 属性

默认值为 10 分钟,这意味着如果服务器在 10 分钟内没有收到来自该客户端的任何请求,会话将过期并附带所有内容。只要用户处于活动状态,会话就会更新。请记住,较长的会话超时可能会增加服务器的内存使用量。

还有一个名为 heartbeat 的功能,它向服务器发送 ping 以保持会话活动,但这仅在您的应用程序处于 前景.

如果您的应用程序是原生的,我想您可以实现自己的心跳以使其保持活动状态。

令牌过期

application-descriptor.xml 中,元素 accessTokenExpiration 将定义此特定应用程序的默认 OAuth 令牌过期时间。默认值为 3600 秒(1 小时)。这意味着从用户登录的那一刻起,无论他们是否处于活动状态,他们都有 1 小时的受信任访问。

领域到期

authenticationConfig.xml文件中,每个loginModule都有一个expirationInSeconds属性。与上面类似,它将定义用户登录到此特定登录模块/领域后的信任时间。当过期发生时,服务器将向关联的领域发送新的挑战。

在 7.0 中,-1 表示用户在 serverSessionTimeout 之前是可信的。在 7.1 中,-1 不再是有效值。

如果以上任何一项已过期,客户端可能需要获取新令牌。根据每个 loginModule 的到期时间,用户可能会或可能不会收到新的挑战。

记住我样本

RememberMe 示例 (https://developer.ibm.com/mobilefirstplatform/documentation/getting-started-7-1/foundation/advanced-topics/remember-me/) 使用将唯一的客户端 ID 存储到外部数据库的想法,以便在用户会话过期时自动登录用户。