JS如何与SpringOAuth2安全认证配合_JS与SpringOAuth2安全认证配合的教程

%ignore_a_1%通过OAuth2授权码模式+PKCE跳转登录,获取access_token后在请求头携带Bearer Token访问受Spring Security保护的API,后端配置JWT资源服务器验证令牌并启用CORS支持跨域。

js如何与springoauth2安全认证配合_js与springoauth2安全认证配合的教程

JavaScript前端应用与Spring Boot后端集成OAuth2安全认证,是现代全栈开发中的常见需求。通常前端使用JS(如Vue、React或原生JS)发起请求,后端使用Spring Security + OAuth2进行权限控制。下面介绍如何让JS与Spring OAuth2协同工作,实现安全的用户登录和资源访问。

理解整体架构

在典型的前后端分离项目中:

前端(JS)运行在浏览器中,负责展示界面并与用户交互后端(Spring Boot)暴露REST API,通过Spring Security和OAuth2保护接口认证服务器负责颁发token(可以是独立服务,也可以内嵌在Spring应用中)

常见的流程是:用户在前端点击“登录”,跳转到OAuth2授权服务器(如Google、GitHub或自建),授权后获取access_token,后续请求携带该token访问受保护的API。

配置Spring Boot OAuth2资源服务器

确保你的Spring Boot应用正确配置为OAuth2资源服务器,能验证JWT格式的access token。

application.yml 示例:

spring:  security:    oauth2:      resourceserver:        jwt:          issuer-uri: http://localhost:8080/auth/realms/your-realm          # 或者指定 jwk-set-uri

添加依赖(Maven):

    org.springframework.boot    spring-boot-starter-oauth2-resource-server

启用Security配置:

@Configuration@EnableWebSecuritypublic class SecurityConfig {    @Bean    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {        http.authorizeHttpRequests(authz ->            authz.requestMatchers("/public/**").permitAll()                  .anyRequest().authenticated()        );        http.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt);        return http.build();    }}

前端JS如何处理OAuth2登录与请求

由于浏览器安全限制,不推荐在JS中直接处理client_secret等敏感信息。应采用授权码模式 + PKCE,适合单页应用(SPA)。

序列猴子开放平台 序列猴子开放平台

具有长序列、多模态、单模型、大数据等特点的超大规模语言模型

序列猴子开放平台 56 查看详情 序列猴子开放平台

使用官方推荐库如 openid-client 或更轻量的 simple-oauth2,但更推荐使用 Auth.js(原NextAuth)或 OAuth2-Client 库简化流程。

一个简单的JS登录跳转示例:

function login() {  const clientId = 'your-spa-client-id';  const redirectUri = 'https://www.php.cn/link/c7e07c312fd6bafc9f5192b3dfdf3d3f';  const scope = 'openid profile email';  const state = generateRandomString();  const codeVerifier = generateCodeVerifier(); // PKCE用  const codeChallenge = base64UrlEncode(sha256(codeVerifier));

// 存储codeVerifier以便回调时使用sessionStorage.setItem('code_verifier', codeVerifier);

const authUrl = new URL('https://www.php.cn/link/90918c5b8c17f80e32d5b155a7bf6197');authUrl.searchParams.append('client_id', clientId);authUrl.searchParams.append('response_type', 'code');authUrl.searchParams.append('scope', scope);authUrl.searchParams.append('redirect_uri', redirectUri);authUrl.searchParams.append('state', state);authUrl.searchParams.append('code_challenge', codeChallenge);authUrl.searchParams.append('code_challenge_method', 'S256');

window.location.href = authUrl.toString();}

回调页面(callback.html)处理授权码并换取token:

// 假设URL中包含 ?code=xxx&state=yyyconst urlParams = new URLSearchParams(window.location.search);const code = urlParams.get('code');

if (code) {const codeVerifier = sessionStorage.getItem('code_verifier');fetch('https://www.php.cn/link/d996e31032e7c288d7e20e7b82221c20', {method: 'POST',headers: { 'Content-Type': 'application/x-www-form-urlencoded' },body: new URLSearchParams({grant_type: 'authorization_code',client_id: 'your-spa-client-id',code: code,redirect_uri: 'https://www.php.cn/link/c7e07c312fd6bafc9f5192b3dfdf3d3f',code_verifier: codeVerifier})}).then(response => response.json()).then(data => {localStorage.setItem('access_token', data.access_token);window.location.href = '/dashboard.html';});}

JS发起受保护的API请求

每次调用Spring保护的接口时,在请求头中带上access token:

fetch('http://localhost:8080/api/user/profile', {  method: 'GET',  headers: {    'Authorization': 'Bearer ' + localStorage.getItem('access_token')  }}).then(response => {  if (response.status === 401) {    // token过期,重新登录    window.location.href = '/login.html';  }  return response.json();}).then(data => console.log(data));

建议封装一个API客户端,自动附加token:

function apiGet(url) {  return fetch(url, {    headers: {      'Authorization': 'Bearer ' + localStorage.getItem('access_token')    }  });}

基本上就这些。只要前后端约定好token传递方式,Spring会自动解析JWT并建立安全上下文。注意跨域问题需在后端配置CORS,允许前端域名访问。

以上就是JS如何与SpringOAuth2安全认证配合_JS与SpringOAuth2安全认证配合的教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/878013.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月28日 08:19:04
下一篇 2025年11月28日 08:19:35

相关推荐

  • Streamlit 部分写入和文本元素

    streamlit 入门:初学者指南 代码可以在这里找到:github – jamesbmour/blog_tutorials: 博客的视频版本可以在这里找到:https://youtu.be/eqcqnw7nw7m 介绍 streamlit 是一个开源应用程序框架,可让您以最少的努力创…

    2025年12月13日
    000
  • python代码源码哪里找

    Python 代码源码可从以下渠道获取:官方 Python 文档网站:获取标准库源码GitHub:搜索特定 Python 项目和源码库PyPI:查找 Python 包的源码和文档开源社区:在 Stack Overflow 和 Reddit 等论坛获取代码片段和建议书籍和教程:提供示例代码和分步指南,…

    2025年12月13日
    000
  • python源代码在哪里找

    Python 源代码可从以下途径获取:官方仓库 GitHubPyPI项目代码库托管平台社区论坛和邮件列表官方文档和教程本地安装IDE 集成反编译工具 Python 源代码的获取途径 官方仓库 GitHub:GitHub 托管着官方 Python 解释器和标准库的源代码。访问 https://gith…

    2025年12月13日
    000
  • python源代码怎么看

    有三种方法可以查看 Python 源代码:使用交互式 Python 解释器:导入模块后,可在解释器中查看源代码。使用文本编辑器:在安装目录下打开源代码文件。使用在线资源:在 PyPI 或 GitHub 上查找和查看源代码。 如何查看 Python 源代码 方法 1:使用交互式 Python 解释器 …

    2025年12月13日
    000
  • Python项目:电影推荐系统

    使用 python 和 tkinter 构建电影推荐机 简介 难以决定接下来要看哪部电影?电影推荐机可以为您提供帮助!这个基于 Python 的 GUI 应用程序根据类型推荐电影,允许您搜索特定电影,并提供演员和工作人员信息。它还包括明/暗模式和全屏模式,以提供更好的用户体验。 特点 建议电影:根据…

    2025年12月13日 好文分享
    000
  • 利用 Django 和 PostgreSQL 实现高效的地理定位评级 API

    上周,我有机会深入研究涉及开发基于 HTTP 的 REST API 的案例研究。该API的核心功能是计算指定地理位置之间的平均评分。这些位置涵盖区域、这些区域内的港口,API 有助于检索各种组合的评级:港口到港口、区域到区域、港口到区域和区域到港口。 对于后端,我选择了一个强大的技术堆栈:Djang…

    2025年12月13日
    000
  • 网站时间数据集

    您好,我在kaggle上发现了一个网站使用时间的数据集,所以我想找到访问页面数与网站总时间之间的比率。 您可以在我的github中找到数据集和代码:https://github.com/victordalet/kaggle_analysis/tree/feat/website_traffic 一、安…

    2025年12月13日
    000
  • 学习 Django 时的关键主题

    1. Django 基础知识 项目结构:了解 Django 项目的基本结构(例如,settings.py、urls.py、wsgi.py)。应用程序:了解 Django 应用程序如何在项目中工作以及如何创建和管理它们。URL 和路由:定义 URL 模式并将它们链接到视图。视图:编写基于函数的视图(F…

    2025年12月13日
    000
  • Python 笔记/技巧/课程/细微差别

    我发表了一篇 c++++ 技巧文章,我想写更多我知道的技巧,因为它们中的大多数都是用 python 和 js 编写的,尽管我已经用 c++ 编写了很多代码,但无论如何它们都在这里,我将从基本python语法的琐碎事情开始,但有一些初学者不知道的事情,我用星号标记了⭐️: 1. 列表 项目数据结构的有…

    2025年12月13日
    000
  • System Guard:保护服务器的简单工具

    系统卫士? systemguard 是您轻量级、用户友好且易于设置的服务器监控的首选工具。跟踪从 cpu 使用率和内存到网络速度和正在运行的进程的所有信息,全部集中在一处。 ✨ 主要特点 全面的服务器监控: 密切关注重要的服务器统计信息,例如 CPU、内存、磁盘和网络使用情况。 网速测试: 使用内置…

    2025年12月13日
    000
  • 第一篇文章和 AMA

    开发者们大家好!这是我的第一篇文章?? 在 AMA 会议之前简单介绍一下我: 直到两年前我才成为一名开发者经过几年的非技术自由职业后,我意识到我想要构建产品 – 不仅仅是创建宣传材料或作为产品经理进行管理。我爱上了编码并决定全力以赴。 7 月,我推出了 Creduse,这是一个 API,…

    2025年12月13日
    000
  • 一只猫和一只狗与蟒蛇的发射CO

    嗨, 我发现了一篇关于宠物排放的小文章,因此我决定显示二氧化碳排放(如果它们不存在)。 代码:https://github.com/victordalet/kaggle_analysis/tree/feat/dog_co2 来源: https://www.lekaba.fr/article/l-em…

    2025年12月13日
    000
  • 格式化json数据的工具

    格式化 JSON 数据的工具包括:在线工具:JSON Formatter & ValidatorJSON BeautifierJSON Beautify and Format tool桌面工具:JSON EditorjqPrettyJSON Formatter 格式化 JSON 数据的工具 …

    2025年12月13日
    000
  • mac上json格式化app

    对于 Mac 上 JSON 数据的处理,可借助以下应用完成格式化、验证和美化:JSON Viewer:免费、功能齐全,提供语法高亮和验证。JSON Formatter:免费、易用,支持缩进和缩减 JSON 数据。JSON Beautifier:付费应用,提供高级功能,例如语法高亮和代码折叠。JSON…

    2025年12月13日
    000
  • json数据怎么在浏览器格式化

    如何浏览器格式化 JSON 数据?使用 JavaScript 内置函数 JSON.stringify() 和 JSON.parse()。使用 Chrome DevTools 打开 “Console” 选项卡,粘贴 JSON 并单击 “Format JSON&#82…

    2025年12月13日
    000
  • Python 基础 ||数组、类和对象、For 和 While 循环、函数、If else、继承、Lambda

    这是 #100daysofmiva 的第 9 天。请参阅 github 获取代码片段。 今天,我深入研究了 python,重点关注了一些对任何初学者都至关重要的基本概念。本文档是为那些刚刚开始 python 之旅并希望通过实际示例掌握基础知识的人编写的。 如果您是初学者,这是您第一次阅读本文,请考虑…

    2025年12月13日
    000
  • 哪个国家的维基百科内容最多?

    介绍 当我在互联网上搜索某些内容时,我经常发现英语内容比法语内容全面得多。 虽然考虑到世界上讲英语的人数与讲法语的人数相比(大约多 4 到 5 倍),这似乎是显而易见的,但我想测试这个假设并对其进行量化。 tldr:平均而言,维基百科上的英文文章比法文文章包含的信息多 19%。 此分析的源代码可在此…

    2025年12月13日
    000
  • 使用 Streamlit 将机器学习模型部署为 Web 应用程序

    介绍 机器学习模型本质上是一组用于进行预测或查找数据模式的规则或机制。简单地说(不用担心过于简单化),在 excel 中使用最小二乘法计算的趋势线也是一个模型。然而,实际应用中使用的模型并不那么简单——它们常常涉及更复杂的方程和算法,而不仅仅是简单的方程。 在这篇文章中,我将首先构建一个非常简单的机…

    2025年12月13日
    000
  • 为 Shutil 添加多线程?!

    讨论shutil.copytree添加多线程 ** 我在 python 上写的讨论:https://discuss.python.org/t/add-multithreading-to-shutil-copytree/62078 ** 背景 shutil 是 python 中一个非常有用的模块。你可…

    2025年12月13日
    000
  • Python 元组、集合和字典 || #f #daysofMiva 日

    今天是 #100daysofmiva 的第 5 天 – 请参阅 github 项目。 我深入研究了 python 中的三种基本数据结构:元组、集合和字典。这些结构对于有效组织和访问数据至关重要,每个结构都具有独特的特征和用例。这是我所学到的详细报告,包括流程、技术细节和代码示例。 1.元…

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信