@ conquighub/ react-auth (英语)
对浏览器应用进行认证的响应提供者和钩子
配置图 API (英语). 运行浏览器- 直接流端到结束 ——
运行时间发现, OIDC 授权代码 + PKCE 对抗已发现的 IDP, 然后
RFC 8693 硬币交换 薄荷 ConfigHub 硬币——手放回打字机
@confighub/api 客户端预线
与标志.
import { ConfigHubAuthProvider, useAuth, useConfigHub } from '@confighub/react-auth';
<ConfigHubAuthProvider baseUrl="https://hub.confighub.com" clientId={CLIENT_ID}>
<App />
</ConfigHubAuthProvider>;
function App() {
const { status, user, login, logout } = useAuth();
const api = useConfigHub(); // typed client, token already attached
// await api.GET('/me'); await api.GET('/space/{space_id}/unit', { params: { path: { space_id } } });
if (status === 'loading') return <p>…</p>;
if (status !== 'authenticated') return <button onClick={login}>Log in</button>;
return <button onClick={logout}>Sign out {user!.organizationId}</button>;
}
配置
baseUrl例如,ConfigHub案.https://hub.confighub.com。 。 。 .clientId这个应用程序的注册 OAuth 客户端 ID,来自cub oauthclient create <name> --redirect-uri <origin>/。 。 。 .callbackPath(默认)/)——IDP重定向回{origin}{callbackPath}, (中文(简体) ), 它就是重定向URI以注册。 它故意固定的:用户的页面 从PKCE旅行开始state然后在返回时恢复,故登录 从/space/x?tab=units回到那里,没有记录每条路.persist(默认)'session')——本届会议保留在sessionStorage,所以一个 重新装入或内塔布导航不通过 IDP. Tab-scoped 进行回转 当标签关闭时,当符号过期时会掉入.'none'放在记忆里 仅此而已,每一页的负载都会开始未经认证.onUnauthorized(默认)'login')——一个被否决的标志意味着什么.'login'尝试 沉默的再校正;'logout'只是放弃了会话。 应用时getAccessToken当一个数据客户端报告一个401时 结束handleUnauthorized(下关.
IDP发行器和OIDC端点是从 {baseUrl}/api/info,所以请
同一构件运行于任何 ConfigHub 实例( 捆绑的 Ceycloak for Cloud, a)
企业的IdP).
useAuth()
const { status, user, error, login, logout, reauthenticate, signInWithTicket, getToken } = useAuth();
login(options?)——改道到IDP.returnTo选择着陆路径 (默认:为当前之一).organization是 Keycloak 组织别名, 已发送 作为organization:<alias>范围, 因此不提示多用户 。 左边 ,则使用此浏览器中上次成功登录的别名(记住) 每个客户localStorage;一个简短的公用名称,而不是证书),所以一个新的 选项卡或在同一组织静默地登录后登录.nullkeycloak 提示。 两者都是应用程序的开关 组织:通过IdP新登录,即会员所在地 决定.prompt: 'none' | 'login' | 'create'通过;'create'打开 iDP的注册表,所以一个注册链接是login({ prompt: 'create' })。 。 。 .logout(options?)——在本分页中忘记会话.endSession: true也结束 (由RP启动的登录程序)id_token_hint),着陆postLogoutRedirectUri(默认: 回调 URI),必须注册 为客户。 没有它,下一个登录 骑SSO饼干安静地。 虽然 页面导航到 IDP, 状态保留loading因此,一个程序登录 自动打开unauthenticated不启动一个与日志相匹配的登录.reauthenticate()——标志停止工作:aprompt=none来回旅行 会议已经安排好了。 状态为loading与此同时,没有unauthenticated自动登录的应用程序unauthenticated不是种族 这个 如果 IdP 会话也走了, 页面会回来unauthenticated时 没有身份提供商 没有什么可问的 状态去 直达unauthenticated。 。 。 .signInWithTicket(ticket)——赎回单次使用票cub auth browser-session(单位:千美元)POST /auth/browser-session)为会. 就是这样 一个浏览器在没有身份提供者的实例中签名/api/info通过广告显示AuthIssuer· ;login()拒绝方式NoIdentityProvider在这里。 会话后面没有 IDP, 所以当它过期时, 用户会运行 重新指挥.
外部反应
两个模块级函数将会话带入无法使用钩的代码,例如 数据客户端的请求设置 :
getAccessToken()——当前符号,或未定义. 它从不返回过期的 符号:它启动提供者的恢复(每onUnauthorized和未定义的返回, 页面从IdP那里回来.handleUnauthorized()- 报告一个401。 仅需在它被拒绝之前 过期( 服务器密钥旋转, 取消会话); 过期由getAccessToken. 已经开始恢复时不开放.
import { getAccessToken, handleUnauthorized } from '@confighub/react-auth';
import { configureConfigHub } from '@confighub/rtk-query';
configureConfigHub({ baseUrl, getToken: getAccessToken, onUnauthorized: handleUnauthorized });
坚挺姿态
铸币局保存在 sessionStorage 默认或内存
与 persist: 'none'永远 localStorage。瞬间 PKCE 状态已停放
sessionStorage 整个授权重定向。 被拒绝或过期的令牌触发 a
静态再校正(见 onUnauthorized)),需要实时的 IDP 会话;刷新
不使用指使符,所以指使符的寿命是没有指使符的页面最长的
转向.
react (18或19)是同龄人依赖关系.