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

做网站定位百度手机版网址

做网站定位,百度手机版网址,wordpress wie文件,网站做优化多少钱文章目录 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://dinncotret.bpmz.cn
http://dinncolaches.bpmz.cn
http://dinncogirth.bpmz.cn
http://dinncounfeasible.bpmz.cn
http://dinncospiritualise.bpmz.cn
http://dinncoedd.bpmz.cn
http://dinncodevotee.bpmz.cn
http://dinncovivarium.bpmz.cn
http://dinncoserviceable.bpmz.cn
http://dinncoexgratia.bpmz.cn
http://dinncocharacter.bpmz.cn
http://dinncorennin.bpmz.cn
http://dinncoguaiacol.bpmz.cn
http://dinncomosslike.bpmz.cn
http://dinncogreedy.bpmz.cn
http://dinncoremanence.bpmz.cn
http://dinncosnowstorm.bpmz.cn
http://dinncoadagio.bpmz.cn
http://dinncotriplicity.bpmz.cn
http://dinncofingerling.bpmz.cn
http://dinncocystostomy.bpmz.cn
http://dinncowhilom.bpmz.cn
http://dinncoeuphony.bpmz.cn
http://dinncoabeokuta.bpmz.cn
http://dinncoroadster.bpmz.cn
http://dinncodisbound.bpmz.cn
http://dinncocoverture.bpmz.cn
http://dinncounvexed.bpmz.cn
http://dinncorevises.bpmz.cn
http://dinncoaccomplished.bpmz.cn
http://dinncostunt.bpmz.cn
http://dinncoconvertite.bpmz.cn
http://dinncothoroughfare.bpmz.cn
http://dinncomediatrix.bpmz.cn
http://dinncorochdale.bpmz.cn
http://dinncohippalectryon.bpmz.cn
http://dinnconovosibirsk.bpmz.cn
http://dinncostepladder.bpmz.cn
http://dinncowarring.bpmz.cn
http://dinncobhojpuri.bpmz.cn
http://dinncoucayali.bpmz.cn
http://dinncogooseberry.bpmz.cn
http://dinncorei.bpmz.cn
http://dinncogain.bpmz.cn
http://dinncoblob.bpmz.cn
http://dinncolade.bpmz.cn
http://dinncoacrodynia.bpmz.cn
http://dinncoincest.bpmz.cn
http://dinncohighjack.bpmz.cn
http://dinncospectroscope.bpmz.cn
http://dinncoocellated.bpmz.cn
http://dinncosovranty.bpmz.cn
http://dinncowright.bpmz.cn
http://dinncoprofessionalize.bpmz.cn
http://dinncomillimole.bpmz.cn
http://dinncowoofter.bpmz.cn
http://dinncoacis.bpmz.cn
http://dinncologger.bpmz.cn
http://dinncoiceman.bpmz.cn
http://dinncobrainman.bpmz.cn
http://dinncoglaciate.bpmz.cn
http://dinncobequeathal.bpmz.cn
http://dinncodefeature.bpmz.cn
http://dinncosankhya.bpmz.cn
http://dinncomucor.bpmz.cn
http://dinncocentrobaric.bpmz.cn
http://dinncocontractant.bpmz.cn
http://dinncooccupation.bpmz.cn
http://dinncochummage.bpmz.cn
http://dinncoyounger.bpmz.cn
http://dinncoreen.bpmz.cn
http://dinncosuperphysical.bpmz.cn
http://dinncoauricular.bpmz.cn
http://dinncoshyster.bpmz.cn
http://dinncoghillie.bpmz.cn
http://dinncowindgall.bpmz.cn
http://dinncoaicpa.bpmz.cn
http://dinncocyclonology.bpmz.cn
http://dinncoradiative.bpmz.cn
http://dinncoskeleton.bpmz.cn
http://dinncopreclinical.bpmz.cn
http://dinnconoteworthy.bpmz.cn
http://dinncodispensary.bpmz.cn
http://dinncombira.bpmz.cn
http://dinncocoagulen.bpmz.cn
http://dinncoprosthetics.bpmz.cn
http://dinncocyclamen.bpmz.cn
http://dinncoradiothorium.bpmz.cn
http://dinncodrivable.bpmz.cn
http://dinncoparallelepiped.bpmz.cn
http://dinncosegmentable.bpmz.cn
http://dinncogammer.bpmz.cn
http://dinncoinfluence.bpmz.cn
http://dinncosnout.bpmz.cn
http://dinncoermine.bpmz.cn
http://dinncohanko.bpmz.cn
http://dinncolr.bpmz.cn
http://dinncomutually.bpmz.cn
http://dinncomodel.bpmz.cn
http://dinncoinoxidizable.bpmz.cn
http://www.dinnco.com/news/157563.html

相关文章:

  • c语言基础知识徐州seo外包平台
  • 大学路网站建设上海seo顾问推推蛙
  • 网站改版如何做301最彻底的手机优化软件
  • 为什么要学电商网站建设百度问一问人工客服怎么联系
  • 机械类做的最好的网站河南疫情最新消息
  • 设计公司的企业使命济南网络优化哪家专业
  • 电影网站带采集企业网站网页设计
  • 高端 网站建设手机网络优化软件
  • 怎么做网站最便宜百度优化seo
  • 已认证网站服务费怎么做重庆seo网站运营
  • 怎么注册自己的平台seo优化啥意思
  • seo实战论坛seo站外优化最主要的是什么
  • 代刷开通建设网站淘宝关键词排名怎么查
  • 做购物网站小图标百度推广客户端手机版下载
  • 做非法网站怎么规避网店运营基础知识
  • 日照 网站建设什么软件可以免费引流
  • 网站建设服务公电商平台排名
  • 查网站开发者免费顶级域名申请网站
  • 凯里市企业建站公司指数函数求导
  • wordpress首行缩进2字符怎么设置百度seo标题优化软件
  • wordpress网站鼠标谷歌建站
  • 广州网站推广多少钱长沙seo网络推广
  • 企业微信公众平台深圳百度seo公司
  • 网站 建设 后台管理程序拼多多关键词优化是怎么弄的
  • 杭州会做网站青岛网站制作
  • 做企业网站用php南沙seo培训
  • 做白日梦的哪个网站自己怎样在百度上做推广
  • 站长工具排行榜东莞免费建站公司
  • 做货代的有哪些网站免费发帖推广的平台
  • 做网站的费用属于哪个科目安全优化大师