ERROR: components/signin/public/webdata/token_service_table.cc:246] Failed to decrypt token for service AccountId-xxxx
ERROR: google_apis/gcm/engine/gcm_store_impl.cc:938] Failed to restore security token.
dbus-daemon: Activating service name='org.gnome.keyring.SystemPrompter' ... failed:
Process org.gnome.keyring.SystemPrompter exited with status 1
gnome-keyring-daemon: couldn't create system prompt
一、环境信息
二、问题描述
在 Deepin 25 上,Google Chrome 每次正常关闭后重新启动,所有网站的登录状态全部丢失,必须逐站点重新登录。历史记录、扩展、已保存的网站数据等其他 profile 数据均正常,仅 Cookie/登录令牌丢失。
Chrome 自 M126 起在 Linux 上采用 os_crypt_async 机制,通过 XDG Secret Portal(
org.freedesktop.portal.Secret)持久化保存 Cookie 加密密钥。该密钥一旦无法持久化,Chrome 每次启动只能使用临时随机密钥,旧 Cookie 全部解密失败并被丢弃,即产生上述现象。三、复现步骤
Deepin 25 全新/默认会话,安装官方 Chrome deb 并启动;
在任意网站登录(如 xiaohongshu.com、doubao.com 等);
正常退出 Chrome(菜单 → 退出);
重新启动 Chrome;
实际结果:所有网站均回到未登录状态;
chrome://device-log及 journal 中可见解密失败记录:~/.config/google-chrome/Local State中记录:预期结果:登录状态跨重启保持。
辅助证据(数据层面):Cookie 数据库
Default/Cookies中所有记录的创建时间均为本次 Chrome 启动的时刻,上一会话的 Cookie 一条不存;而同一 profile 的 History 数据可追溯到数月前,证明是 Cookie 加密密钥问题而非 profile 损坏。四、根因分析
Chrome 依赖的调用链为:
排查发现 Deepin 25 的前端路由配置缺失后端:
/usr/share/xdg-desktop-portal/dde-portals.conf内容仅有:xdg-desktop-portal-dde 1.1.9未实现org.freedesktop.impl.portal.Secret接口;prev_init_success: false)→ 使用临时密钥 → 重启后旧 Cookie 全部无法解密被清空。而系统里现成的
gnome-keyring.portal(由 gnome-keyring 提供,DBusName=org.freedesktop.secrets)声明支持org.freedesktop.impl.portal.Secret,后端实际工作正常,只是前端没有把它接入路由。附带发现的相关问题(同属密钥环链路)
org.gnome.keyring.SystemPrompter(gcr-prompter)激活失败,导致密钥环无法弹出解锁提示框:五、修复方案(本机已验证有效)
在用户级新增 portal 路由配置
~/.config/xdg-desktop-portal/dde-portals.conf:重启 portal 服务:
验证结果:
RetrieveSecret连续两次,均成功返回 64 字节且内容完全一致的密钥,证明密钥已可持久化、跨启动稳定。六、对官方的建议
主修复:在
/usr/share/xdg-desktop-portal/dde-portals.conf中补充:或在 xdg-desktop-portal-dde 中自行实现
org.freedesktop.impl.portal.Secret。评估升级/适配 Secret Portal v2(
CreateSession会话式调用),保证与新版 Chromium/Electron 系应用的兼容性。排查会话启动阶段 gcr-prompter(
org.gnome.keyring.SystemPrompter)激活失败的问题,保证密钥环锁定时能正常弹出解锁框。排查 dde-application-manager 对
gnome-keyring-{pkcs11,secrets,ssh}.desktop自启动项"couldn't pass check"的判定逻辑。七、影响范围
八、临时缓解方案(在官方修复前)
给 Chrome 的启动命令追加
--password-store=basic,使其改用内置固定密钥方案、绕开 Portal:代价:Cookie 与保存的密码改用静态密钥加密,安全性低于密钥环方案,请官方与用户酌情选用。