@axa-fr/oidc-客户端-服务-工作
服务员 @axa-fr/oidc-client 财务报告和审定财务报表
@axa-fr/react-oidc它截取了OIDC的信号响应,
默认情况下在工人记忆中保留访问和刷新令牌,并添加访问
符合您信任域配置的请求的符号.
大多数应用程序应该安装一个客户端软件包,而不是使用此软件包 直接包。 客户负责工人登记和沟通.
如何运作
flowchart LR
App["Browser application"] --> Client["OIDC client or React bindings"]
Client <-->|"Messages and token placeholders"| Worker["OIDC service worker"]
Worker <-->|"Token requests and responses"| Provider["OIDC provider"]
App -->|"API request"| Worker
Worker -->|"Access token on trusted requests"| API["Trusted API"]
Config["OidcTrustedDomains.js"] --> Worker
应用程序可以使用符名元数据而不接收真实访问或
刷新符号 . showAccessToken: true 明确暴露访问符
应用程序 JavaScript 同时将刷新符号保存在工人中.
[大 托肯隔离并不妨碍XSS或CSRF. 仍然可以输入代码 申请中经认证的请求。 使用限制性内容安全 政策,防止脚本注射, 并强制授权您的 API .
开始
-
创建您的应用程序的公共资产目录, 如果它不存在, 那么 运行您安装的客户端的复制命令 :
# Vanilla client node ./node_modules/@axa-fr/oidc-client/bin/copy-service-worker-files.mjs public # React — use this instead node ./node_modules/@axa-fr/react-oidc/bin/copy-service-worker-files.mjs public替换
public如果您的框架服务于另一个目录的静态文件. 命令覆盖OidcServiceWorker.js但保留一个已存在的OidcTrustedDomains.js。 。 。 . -
替换样本条目为
public/OidcTrustedDomains.js与您的提供者 和API URL,如下所述. -
将这些字段添加到您的 OIDC 客户端配置 :
const configuration = { ...oidcConfiguration, service_worker_relative_url: '/OidcServiceWorker.js', service_worker_only: true, };与
service_worker_only: true,认证需要工人的支持. 准备吧false只有您接受返回到 JavaScript 可访问浏览器时 当工人无法工作时,储存. -
在您的应用程序中添加相应的复制命令
postinstall剧本. 例如,对反应:{ "scripts": { "postinstall": "node ./node_modules/@axa-fr/react-oidc/bin/copy-service-worker-files.mjs public" } }将这与现有的安装步骤合并,而不是取而代之. 调用复制的工人 每一个客户端升级.
信任域
保持提供者端点和 API 目的地分离 :
const trustedDomains = {
default: {
oidcDomains: [/^https:\/\/identity\.example\.com(?:\/|$)/],
accessTokenDomains: [/^https:\/\/api\.example\.com(?:\/|$)/],
},
};
default 是默认客户端配置名称。 添加匹配条目
每名客户端或 OidcProvider这些规则使用正则表达匹配,
包括当规则是弦。 锁定模式, 逃避主机名点, 以及
包含一个主机或路径边界,以使外观的 URL 不匹配.
包含 OIDC 实际终点来源
如果您的提供者服务于来自不同的发现、 标志或用户信息
师曰. 只允许接收此配置的 API 目的地
访问符; 不将演示许可列表复制到生产中 .
使用 oidcClient.fetchWithTokens(fetch) 在香草应用中或 useOidcFetch()
在反应。 特别是, allowMultiTabLogin: true 需求 oIDC 获取
包装器:其占位符识别出工人必须注入的符号的标签.
一个平地 fetch 无法提供这些信息.
见 客户端的服务-工作指南 附加选项,包括 DPoP、访问的可见度和请求 处理.
部署和解决问题
- 在 HTTPS 上同时服务您的应用程序来源的 JavaScript 文件 (当地东道主支持发展).
- 工人必须控制使用它的页面。 在源头为它服务 是最简单的设置;在子路径下托管时要说明工人的范围.
- 将文件作为 JavaScript 服务,而不是用于 SPA 路由的 HTML 倒置 . 如果 注册失败 .
- 保持工人版本与客户端对齐. 编辑可信域文件,
未生成
OidcServiceWorker.js。 。 。 . - 如果 API 请求返回 401, 请检查活动的配置名称, 匹配
accessTokenDomains条目,以及您是否正在使用 OIDC 获取包装. API还必须接受该标志的发行者,受众,和范围. - 在改变工人资产后,检查哪个工人版本控制了您的页面; 已经打开的标签可能仍由年长的工人控制.
这个 财务问题 涵盖更广泛的安全和一体化问题.
议定书参考
大多数应用程序不需要直接发送工人信息. 习惯
一体化, PROTOCOL.md 描述已版本的消息
信封、有效载荷、代号占位符、存储密钥和兼容性保证.
协议常数和类型从
@axa-fr/oidc-client-service-worker/protocol 并再由
@axa-fr/oidc-client。 。 。 .
用于源开发, 使用根 贡献命令 和已死的锁文件。 保持本套件的Vitest和覆盖版本对齐.