Azure AD 和 Identity Server4 客户端身份验证和授权

使用 React 和 IdentityServer4 进行身份验证

1.安装所需的库

npm install oidc-client

2.配置 IdentityServer4 客户端

在 IdentityServer4 中,需要配置一个客户端来使用 OpenID Connect 协议进行身份验证。客户端需要配置客户端 ID、客户端秘钥、重定向 URI 和要请求的 scope,如:

new Client
{ClientId = "react-app",ClientName = "React Application",AllowedGrantTypes = GrantTypes.Code,RequireConsent = false,RedirectUris = { "http://localhost:3000/callback.html" },PostLogoutRedirectUris = { "http://localhost:3000/" },AllowedScopes = { "openid", "profile" },ClientSecrets = new List<Secret>{new Secret("your_client_secret".Sha256())},AllowAccessTokensViaBrowser = true
};

3.在 React 中配置 OpenID Connect 客户端

import { UserManager } from 'oidc-client';const userManager = new UserManager({authority: 'http://localhost:5000',client_id: 'react-app',redirect_uri: 'http://localhost:3000/callback.html',response_type: 'code',scope: 'openid profile',post_logout_redirect_uri: 'http://localhost:3000/',monitorInterval: 10000,checkSessionInterval: 2000,automaticSilentRenew: true,filterProtocolClaims: true,loadUserInfo: true
});// 若要登录,请使用以下代码:
userManager.signinRedirect();// 若要注销,请使用以下代码:
userManager.signoutRedirect();

authority 参数是 IdentityServer4 实例的 URL。client_id 参数是在 IdentityServer4 中配置的客户端 ID。redirect_uri 参数是在 IdentityServer4 中配置的回调 URL。response_type 参数是 code,表示使用授权码模式。scope 参数指定要请求的 scope。post_logout_redirect_uri 参数是注销后要重定向的 URL。monitorIntervalcheckSessionInterval 参数分别用于轮询客户端会话状态和检查用户会话状态。automaticSilentRenew 参数用于启用自动静默更新。filterProtocolClaims 参数表示使用令牌的协议声明,loadUserInfo 参数表示加载用户信息。

4.处理身份验证回调
定义了一个名为 Callback 的组件来处理身份验证回调

import React from 'react';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import Callback from './Callback';const App = () => {return (<BrowserRouter><Switch><Route path="/callback.html" component={Callback} />{/* 其他路由 */}</Switch></BrowserRouter>);
};export default App;

使用 React 和Azure AD 进行身份验证

使用 React 和 Azure AD 进行身份验证可以使用 OpenID Connect 和 Microsoft 身份验证库 for JavaScript (MSAL.js)来完成。
1.安装所需的库

npm install msal

2.配置 Azure AD 应用程序

Azure AD 应用程序需要具有适当的设置,以接受来自 React 应用程序的请求。需要为 Azure AD 应用程序配置重定向 URI、获取的 scopes 和访问令牌等内容。例如:

{"appId": "your_app_id_here","appSecret": "your_secret_here","redirectUri": "http://localhost:3000","scopes": ["User.Read"],"authority": "https://login.microsoftonline.com/your_tenant_id_here"
}

2.在 React 中配置 MSAL.js

import { PublicClientApplication } from "@azure/msal-browser";const msalConfig = {auth: {clientId: "your_client_id_here",authority: "https://login.microsoftonline.com/your_tenant_id_here",redirectUri: "http://localhost:3000",},cache: {cacheLocation: "sessionStorage",},
};const msalInstance = new PublicClientApplication(msalConfig);export default msalInstance;

clientId 是 Azure AD 应用程序的 ID,authority 是 https://login.microsoftonline.com/ 加上Azure AD 租户 ID。redirectUri 是 React 应用程序的回调 URL。此外,将cacheLocation设置为“sessionStorage”,这意味着令牌信息只会在浏览器窗口或浏览器标签关闭时才会失效。
4.处理身份验证回调

import React from 'react';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import { MsalAuthenticationTemplate, useMsal } from "@azure/msal-react";
import { Loading } from "./components";
import { HomePage, ProfilePage } from './pages';const ProtectedRoute = ({ children, ...rest }) => {const { instance, accounts, inProgress } = useMsal();const isAuthenticated = accounts.length > 0;if (inProgress === "loginRedirect" || inProgress === "acquireTokenRedirect") {return <Loading />;}return (<Route {...rest}>{isAuthenticated ? (children) : (instance.loginRedirect({scopes: ["openid", "profile"],}))}</Route>);
};const App = () => {return (<BrowserRouter><MsalAuthenticationTemplate><Switch><Route exact path="/"><HomePage /></Route><ProtectedRoute exact path="/profile"><ProfilePage /></ProtectedRoute></Switch></MsalAuthenticationTemplate></BrowserRouter>);
};export default App;

使用 MsalAuthenticationTemplate 包装了我们的路由,以便我们可以利用 useMsal hook 来获取 instance,并通过 instance.loginRedirect() 方法登录用户。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/653439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

条件变量、线程池以及线程的GDB调试学习笔记

目录 一、条件变量 二、线程池概念和实现 三、线程的GDB调试 一、条件变量 应用场景&#xff1a;生产者消费者问题&#xff0c;是线程同步的一种手段。 必要性&#xff1a;为了实现等待某个资源&#xff0c;让线程休眠&#xff0c;提高运行效率 使用步骤&#xff1a; 初始…

深入理解C语言(3):自定义类型详解

文章主题&#xff1a;结构体类型详解&#x1f30f;所属专栏&#xff1a;深入理解C语言&#x1f4d4;作者简介&#xff1a;更新有关深入理解C语言知识的博主一枚&#xff0c;记录分享自己对C语言的深入解读。&#x1f606;个人主页&#xff1a;[₽]的个人主页&#x1f3c4;&…

如何构建自己的股票交易系统

1. 一个基本的股票交易系统可能包括以下几个主要步骤&#xff1a; 市场分析&#xff1a; 这是交易系统的第一步&#xff0c;涉及对当前市场趋势的理解。这可能需要研究过去的价格动向&#xff0c;以确定当前的买入或卖出点。选择股票&#xff1a; 基于市场分析&#xff0c;交易…

面试经典 150 题 -- 数组 / 字符串 (总结)

总的链接 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 88.合并两个有效数组 因为有序&#xff0c;直接设置双指针置于两个数组的末尾&#xff0c;从后往前直接模拟就好了&#xff0c;贪心的比较两个指针所指元素&#xf…

【区块链】区块链技术:起源、发展、重点技术、应用场景与未来演进

区块链技术&#xff1a;起源、发展、重点技术、应用场景与未来演进 引言一、技术起源与发展历史1. 技术起源2. 技术发展历史1. 初期阶段&#xff08;2009-2013年&#xff09;2. 探索阶段&#xff08;2014-2016年&#xff09;3. 发展阶段&#xff08;2017年至今&#xff09; 二、…

前端使用阿里Oss

前言&#xff1a;有时候为了减少宽带和服务器压力等等&#xff0c;就直接给前端操作oss实习文件上传了官方文档 安装 npm i ali-oss 因为我们是js可以使用node jdkconst OSS require(ali-oss);// 初始化OSS客户端。请将以下参数替换为您自己的配置信息。 const client new O…

Rust循环和函数

下面聊聊以下主题&#xff1a; 基于条件的分支循环函数属性测试 基于条件的分支 基于条件的分支&#xff0c;可以通过常见的 if、if else 或 if else if else 构造来完成&#xff0c;例如下面的示例&#xff1a; fn main() { let dead false; let health 48; if dead { p…

《汇编语言:基于linux环境》补码研究

刚开始我使用&#xff0c;如下命令编译&#xff0c;链接程序。 nasm -f elf64 -g -F stabs sandbox.asmld -o sandbox sandbox.ogdb sandbox当我运行 sandbox 时&#xff0c;它会正常运行&#xff0c;但 gdb 无法显示任何源代码。为什么&#xff1f;当我在 gdb 中尝试 run 时&a…

鸿蒙(ArkUI)开发:实现二级联动

场景介绍 列表的二级联动&#xff08;Cascading List&#xff09;是指根据一个列表&#xff08;一级列表&#xff09;的选择结果&#xff0c;来更新另一个列表&#xff08;二级列表&#xff09;的选项。这种联动可以使用户根据实际需求&#xff0c;快速定位到想要的选项&#…

粒子群优化算法(Particle Swarm Optimization,PSO)求解基于移动边缘计算的任务卸载与资源调度优化(提供MATLAB代码)

一、优化模型介绍 移动边缘计算的任务卸载与资源调度优化原理是通过利用配备计算资源的移动无人机来为本地资源有限的移动用户提供计算卸载机会&#xff0c;以减轻用户设备的计算负担并提高计算性能。具体原理如下&#xff1a; 任务卸载&#xff1a;移动边缘计算系统将用户的计…

Windows11搭建GPU版本PyTorch环境详细过程

Anaconda安装 https://www.anaconda.com/ Anaconda: 中文大蟒蛇&#xff0c;是一个开源的Python发行版本&#xff0c;其包含了conda、Python等180多个科学包及其依赖项。从官网下载Setup&#xff1a;点击安装&#xff0c;之后勾选上可以方便在普通命令行cmd和PowerShell中使用…

BGP同步规则

BGP同步规则&#xff1a;开启同步下&#xff0c;从IBGP收到一条路由不会传给任何EBGP邻居(实验效果IBGP邻居和EBGP邻居都不传)&#xff0c;除非从自身的IGP中也学到这条路由。目的是防止AS内部出现路由黑洞&#xff0c;向外部通告了一个本AS不可达的虚假的路由。 同步规则只影响…

qt学习:http+访问百度智能云api实现车牌识别

目录 登录到百度智能云&#xff0c;找到文字识别 完成操作指引 开通 查看车牌识别的api文档 ​编辑​编辑 查看自己应用的api key 查看回应的数据格式 编程步骤 ui界面编辑 添加模块&#xff0c;头文件和定义变量 新建两个类&#xff0c;一个图像Image类&#xff0c…

Linux常用指令的整合

之前面试被问到了Linux相关的指令&#xff0c;所以我整理的一份常用的Linux指令列表&#xff0c;适用于大多数Linux发行版&#xff0c;现分享给大家&#xff1a; 文件操作 ls&#xff1a;列出目录内容。cd [目录]&#xff1a;更改当前目录。pwd&#xff1a;显示当前目录路径。m…

Day01-变量和数据类型课后练习(输出你最想说的一句话,定义所有基本数据类型的变量和字符串变量,用合适类型的变量存储个人信息并输出,定义圆周率PI,简答题)

参考答案博客链接跳转 文章目录 1、输出你最想说的一句话&#xff01;2、定义所有基本数据类型的变量和字符串变量3、用合适类型的变量存储个人信息并输出4、定义圆周率PI5、简答题 1、输出你最想说的一句话&#xff01; 编写步骤&#xff1a;List item定义类 Homework1&…

Qt容器QVariant

在Qt中&#xff0c;QVariant是一个通用的值容器&#xff0c;它可以存储任意类型的数据&#xff0c;例如整数、字符串、列表等等。其主要用于提供一种通用的数据类型&#xff0c;方便在不同的函数、类、模块之间传递数据。 QVariant类是Qt的共用体union数据类型&#xff0c;不仅…

【嵌入式移植】5、U-Boot源码分析2—make nanopi_neo2_defconfig

U-Boot源码分析2—make nanopi_neo2_defconfig 1 概述2 nanopi_neo2_defconfig3 编译过程分析3.1 编译目标3.2 scripts_basic3.2.1 prefix src定义3.2.2 PHONY3.2.3 __build3.2.4 fixdep3.3 objscripts/kconfig 1 概述 上一章中&#xff0c;对Makefile相关源码进行了初步分析&…

从零开始:CentOS系统下搭建DNS服务器的详细教程

前言 如果你希望在CentOS系统上建立自己的DNS服务器,那么这篇文章绝对是你不容错过的宝藏指南。我们提供了详尽的步骤和实用技巧,让你能够轻松完成搭建过程。从安装必要的软件到配置区域文件,我们都将一一为你呈现。无论你的身份是运维人员,还是程序员,抑或是对网络基础设…

服务端开发小记02——Maven

这里写目录标题 Maven简介Maven在Linux下的安装Maven常用命令 Maven简介 Apache Maven Project是一个apache的开源项目&#xff0c;是用于构建和管理Java项目的工具包。 用Maven可以方便地创建项目&#xff0c;基于archetype可以创建多种类型的java项目&#xff1b;Maven仓库…

5G_RACH(一)

什么是RACH RACH 代表 Random Access Channel。这是开机时UE发给eNB的第一条消息。 为什么选择RACH &#xff1f;&#xff08;RACH 的功能是什么&#xff1f; 当你第一次听到RACH或RACH Process这个词时&#xff0c;你脑海中浮现的第一个问题是“为什么是RACH&#xff1f;”…