@batoanng/oidc (韩语)
@batoanng/oidc 包装 react-oidc-context 包含路由器-意识回调路由,共享授权上下文,登录后浓缩帮助器,以及反应单页应用程序的即时认证状态屏幕.
特征
- 环绕
react-oidc-context包括登录、登录和过期密码路由. - 显示共享授权上下文
useOidcAuthorisationContext, (中文(简体) ),useChallenge,以及useChallengeResult。 。 。 . - 提供
OidcAuthorisationCallback用于登录后配置和特权加载. - 可以给一个轴线客户端
Authorization头和单个无声再试401。 。 。 . - 船舶重置密码、错误和状态显示屏
@batoanng/mui-components。 。 。 .
安装
pnpm add @batoanng/oidc
同伴依赖关系包括 react, (中文(简体) ), react-router-dom, (中文(简体) ), react-oidc-context, (中文(简体) ), oidc-client-ts, (中文(简体) ), axios, (中文(简体) ), @mui/material, (中文(简体) ), @emotion/react, (中文(简体) ), react-hook-form, (中文(简体) ), react-use,以及 @batoanng/mui-components。 。 。 .
如果使用内置屏幕 @batoanng/mui-components,同时安装该套件所需的任何额外的同位素.
使用量
将您的应用程序的路由部分包入 OidcAuthorisationProvider。提供者必须住在反光路由器内 <Router> 因为它注入回调路线 <Routes>。 。 。 .
import { OidcAuthorisationProvider } from '@batoanng/oidc';
export function AppShell() {
return (
<OidcAuthorisationProvider
userManagerSettings={{
authority: 'https://your-idp.example.com',
client_id: 'web-app',
redirect_uri: 'http://localhost:3000/oidc/callback',
post_logout_redirect_uri: 'http://localhost:3000/oidc/logout',
}}
>
<AppRoutes />
</OidcAuthorisationProvider>
);
}
登录回调完成后, 加载用户配置和权限, 然后交给 OidcAuthorisationCallback 在您保护的UI 创建之前, 共享授权背景已覆盖 .
import axios from 'axios';
import {
OidcAuthorisationCallback,
useOidcAuthorisationContext,
useEnsureOidcLoginToken,
} from '@batoanng/oidc';
const apiClient = axios.create({
baseURL: '/api',
});
export function PostLoginGate() {
const userInformation = {
shortName: 'T. User',
fullName: 'Test User',
email: '[email protected]',
};
const privileges = {
'activityLog.read': true,
};
return (
<OidcAuthorisationCallback apiClient={apiClient} userInformation={userInformation} privileges={privileges}>
<ProtectedApp />
</OidcAuthorisationCallback>
);
}
export function ProtectedPage() {
useEnsureOidcLoginToken();
const { isAuthenticated, onLogout, token } = useOidcAuthorisationContext();
return (
<section>
<div>{isAuthenticated ? 'Signed in' : 'Signed out'}</div>
<div>{token}</div>
<button onClick={() => void onLogout()}>Logout</button>
</section>
);
}
自动流量
flowchart TD
A["App Router"] --> B["OidcAuthorisationProvider"]
B --> C["react-oidc-context AuthProvider"]
B --> D["/oidc/callback -> OidcLoginCallback"]
B --> E["/oidc/logout -> OidcLogoutCallback"]
B --> F["* -> OidcAuthorisationContextProvider"]
D --> G{"Expired password response?"}
G -- "Yes" --> H["/expired -> OidcResetPasswordPage"]
G -- "No" --> I["Navigate to postLoginUrl or /"]
F --> J["AuthorisationContext"]
J --> K["useOidcAuthorisationContext / useChallenge"]
I --> L["Load user profile and privileges"]
L --> M["OidcAuthorisationCallback"]
M --> N["Update user information and privilege state"]
M --> O["Optional axios header + 401 retry wiring"]
N --> P["Protected application UI"]
O --> P
道具
OidcAuthorisationProvider
| Prop | 类型 | 页:1 |
|---|---|---|
userManagerSettings | UserManagerSettings | 路过 react-oidc-context是因为 AuthProvider。 。 。 . |
loginCallbackRelativeUrl | string | 登录回调路径的可选更改 。 路径名的默认值 redirect_uri,或 /oidc/callback。 。 。 . |
logoutCallbackRelativeUrl | string | 登录召回路由的可选更改 。 路径名的默认值 post_logout_redirect_uri,或 /oidc/logout。 。 。 . |
onLoggingIn | (options?: LoginOptions) => void | boolean | Promise<void | boolean> | 返回时 false 以取消登录尝试. |
onLoggingOut | () => void | boolean | Promise<void | boolean> | 返回时 false 取消登录尝试. |
onPasswordReset | (email: string) => void | boolean | Promise<void | boolean> | 当过期的 Password 流程提交或重发重设邮件时调用 . |
OidcAuthorisationCallback
| Prop | 类型 | 页:1 |
|---|---|---|
apiClient | AxiosInstance | 可选的轴式实例 Authorization 页眉更新和一次无声- 新鲜重试 401。 。 。 . |
userInformation | UserInformation | string | 提供已装入的用户配置文件, 或重定向 URL 字符串在登录后导航. |
privileges | UserPrivileges | 当前用户的解析特权映射 . |
error | Error | null | 渲染内置登录出错状态并让用户登录出错. |
authScheme | string | 在使用时使用的授权方案 Authorization 头曰. 默认为 Bearer。 。 。 . |
综合说明
默认路径
| 路线 | 目的 |
|---|---|
/oidc/callback | 处理 OIDC 登录重定向 . |
/oidc/logout | 处理 OIDC 日志重定向 . |
/expired | 显示 IdP 报告已过期密码响应时的密码重置流量 . |
Axios 行为
setBearerToken在 arxios 实例上存储当前访问符并保存defaults.headers.common.Authorization同步.OidcAuthorisationCallback为所提供安装一个响应截取器apiClient。 。 。 .- A 类
401触发一个signinSilent()尝试。 如果还回了新的令牌, 失败的请求会经过一次刷新Authorization头曰.
相关软件包
@batoanng/mui-components提供内置屏幕所使用的状态、通知和形式原始.@batoanng/utils是一个相关的工作空间工具包,但是@batoanng/oidc现在使用react-use直接用于其本地的钩子助手.
发展
pnpm --dir packages/oidc lint
pnpm --dir packages/oidc type-check
pnpm --dir packages/oidc test
pnpm --dir packages/oidc build
关键文件 :
src/OidcAuthorisationProvider.tsxsrc/OidcAuthorisationContextProvider.tsxsrc/OidcAuthorisationCallback.tsxsrc/hooks.tssrc/types.ts