当前位置: 首页 > news >正文

wordpress 动态jsseo培训公司

wordpress 动态js,seo培训公司,梅州站改造高铁站,百度做网站要多长时间文章目录 OpenID Connect (OIDC)3种 授权模式 【服务端】express 集成OIDC【前端】react 集成OIDCoidc-client-js库 原生集成react-oidc-context 库非组件获取user信息 OAuth 2.0 协议主要用于资源授权。 OpenID Connect (OIDC) https://openid.net/specs/openid-connect-core…

文章目录

    • OpenID Connect (OIDC)
      • 3种 授权模式
    • 【服务端】express 集成OIDC
    • 【前端】react 集成OIDC
      • oidc-client-js库 原生集成
      • react-oidc-context 库
        • 非组件获取user信息

OAuth 2.0 协议主要用于资源授权。

OpenID Connect (OIDC)

https://openid.net/specs/openid-connect-core-1_0.html

开放身份连接,是基于 OAuth 2.0协议的一个扩展。通过扩展身份层,来实现去中心化的身份验证服务。
它允许客户端验证用户身份,并获取一些基本用户信息。

使用 OIDC,应用程序可以简化身份验证和授权流程
实现单点登录或先鉴权用户再返回资源

  • 主要包括以下角色:
    OpenID Provider(OP): 指授权服务器,负责签发 Id Token。Authing 是 OpenID Provider。
    End User(EU):资源所有者,即用户;
    ID Token:包含 EU 身份认证信息的 JWT 格式数据,是用户的身份凭证;

  • 主要特点包括:
    身份验证: OIDC 允许客户端应用程序验证用户的身份,确保只有授权的用户才能访问应用程序。
    用户信息: OIDC 提供了一种标准化的方式来获取有关已验证用户的基本信息,如用户名、电子邮件地址等。
    单点登录 (SSO): OIDC 支持单点登录,使用户只需登录一次就可以访问多个应用程序。
    安全性: OIDC 建立在 OAuth 2.0 的安全基础之上,提供了更强的安全性和隐私保护。

3种 授权模式

  1. 授权码流程
    1 前端登录,
    2 后端返回授权码(密钥),【前端需要安全存储密钥】
    3 授权码换token,ID Token、Access Token,【可以反复刷新token】
    4 前端保存并携带Token
    在这里插入图片描述
  2. 隐式流程
    1 前端登录,
    2 后端返回token,ID Token、Access Token,
    3 前端保存并携带Token
    在这里插入图片描述
    适用于 浏览器前端 无法安全存储密钥
  3. 混合流程

【服务端】express 集成OIDC

express-openid-connect 库

  • 应用配置
const { auth } = require('express-openid-connect');const app = express();app.use(auth({issuerBaseURL: 'OIDC url',baseURL: '授权登录成功后回调 url',clientID: 'AUTH_CLIENT_ID',secret: 'AUTH_CLIENT_SECRET',idpLogout: true,session: {store: redisStore,name: '',cookie: {domain: process.env.COOKIE_DOMAIN,},},}));
  • requiresAuth() 对指定接口进行 身份验证
var router = require('express').Router();
const { requiresAuth } = require('express-openid-connect');app.get('/profile', requiresAuth(), (req, res) => {res.send(`hello ${req.oidc.user.name}`);
});

【前端】react 集成OIDC

oidc-client-js库 原生集成

  • 安装 oidc-client-js / oidc-client-ts
npm install oidc-client-js
  • 初始化 OIDC 客户端实例
import { UserManager, WebStorageStateStore } from 'oidc-client-js';// 配置 userManager
const userManager = new UserManager({authority: 'OIDC 提供商的 URL',client_id: ' OIDC 提供商处注册的唯一 client_id',redirect_uri: 'OIDC 认证后回调url',// 认证信息存储到 localStorageuserStore: new WebStorageStateStore({ store: window.localStorage })
});function Root() {const [pageLoaded, setLoaded] = useState(false);// 在应用程序启动时初始化 OIDC 客户端useEffect(() => {userManager.getUser().then((user) => {if (user && !user.expired) {// 如果已经登录,将 user 对象存储在组件状态中setUser(user);} else {// OIDC 登录userManager.signinRedirect();}setLoaded(true);});}, []);
  • 使用 OIDC 认证的 token
import { userManager } from './oidc-config';async function fetchData() {const user = await userManager.getUser();if (user && !user.expired) {// 如果已登录,在请求头中附带 access_tokenconst response = await axios.get('/api/data', {headers: {'Authorization': `Bearer ${user.access_token}`}}}
}

react-oidc-context 库

react-oidc-context封装了oidc-client-ts,使用更简单

  • AuthProvider 集成 OIDC
import { AuthProvider } from 'react-oidc-context';
import { WebStorageStateStore } from 'oidc-client-ts';const oidcConfig = {authority: 'OIDC 提供商的 URL',client_id: ' OIDC 提供商处注册的唯一 client_id',redirect_uri: 'OIDC 认证后回调url',client_secret: 'client 密钥',automaticSilentRenew: true,loadUserInfo: true,// 认证信息存储到 localStorageuserStore: new WebStorageStateStore({store: localStorage,}),onSigninCallback: (): void => {window.history.replaceState({}, document.title, window.location.pathname);},
};function Root() {const [pageLoaded, setLoaded] = useState(false);return (<React.StrictMode>{!pageLoaded ? <PageLoadingSpinner /> : null}<!-- 在外层使用 AuthProvider 集成OIDC --><AuthProvider {...oidcConfig}><RouterProvider router={routes(setLoaded)} /></AuthProvider></React.StrictMode>);
}ReactDOM.createRoot(document.getElementById('root')!).render(<Root />);
  • 登录逻辑
  const auth = useAuth();useEffect(() => {if (!hasAuthParams() &&!auth.isAuthenticated &&!auth.activeNavigator &&!auth.isLoading) {// OIDC 登录auth.signinRedirect();}}, [auth]);// 登录成功后跳转 pageif (auth.isAuthenticated) {return <>{props.children}</>;}// 登录报错处理if (auth.error) {console.log(auth.error);}

对应的http请求

- 跳转到登录页
{{authority}}/.well-known/openid-configuration
- 获取token
{{authority}}/protocol/openid-connect/token
- 获取user info
{{authority}}/protocol/openid-connect/userinfo
  • 组件Component 内获取登录信息
    组件内可以使用 const auth = useAuth(); 获取auth对象,然后得到user
const auth = useAuth();
const token = auth.user?.access_token;
非组件获取user信息

非组件不能使用hook,只能从userStore配置中获取 user信息

import { User } from 'oidc-client-ts';function getUser() {// 之前把信息存储在了localStorage,就从localStorage获取const oidcStorage = localStorage.getItem(`oidc.user:${AUTH_URL}:${AUTH_CLIENT_ID}`);if (!oidcStorage) {return null;}return User.fromStorageString(oidcStorage);
}
http://www.hkea.cn/news/76198/

相关文章:

  • 做推送的网站推荐今日新闻摘抄50字
  • 想在自己的网站做支付优化公司治理结构
  • 国内一家做国外酒店团购的网站网络推广优化是干啥的
  • 手机3d动画制作软件重庆网络seo公司
  • 青海和城乡建设厅网站石家庄自动seo
  • 建站网址是多少深圳市seo上词多少钱
  • 应用网站开发创建网站花钱吗
  • 2023太原疫情优化设计答案大全
  • 创新的专业网站建设适合小学生的新闻事件
  • 政府机关备案网站百度竞价什么意思
  • 广元专业高端网站建设seo视频
  • 烟台网站建设诚信臻动传媒百度网络营销中心
  • 贵阳网站建设搜王道下拉重庆seo网络推广关键词
  • 大型 网站的建设 阶段百度官方网站下载
  • 江苏专业做网站的公司百度地图导航网页版
  • 怎么去投诉做网站的公司宁波seo外包推广软件
  • 网络营销跟做网站有什么区别线上推广如何引流
  • 如何进行网店推广seo排名优化怎样
  • 什么建站程序好收录上海网络公司seo
  • 电子商务网站建设投资预算小程序平台
  • 广州外贸营销型网站成都移动seo
  • 如何韩国视频网站模板下载 迅雷下载sem竞价托管费用
  • 做网站去哪个平台seo培训学院
  • 网站移动端优化的重点有哪些营销策略ppt
  • 养车网站开发搜狗seo快速排名公司
  • 企业电子商务网站建设武汉百度快速排名提升
  • 建一个网站的流程今天刚刚发生的新闻
  • 建立网站请示优化服务是什么意思
  • 有一个做场景动画的网站山东seo费用多少
  • 阿里云服务器的网站备案流程图营销推广有哪些形式