第九章 SpringCloud Oauth2认证中心-Zuul网关上添加认证

OAuth2 入门---整合zuul网关实现微服务权鉴架构 最近在学习OAuth2同时也在思考将其整合入微服务架构的最佳方式。基于OAuth2剥离各微服务权限认证功能,将其单独抽象为一个权鉴服务是我比较认可的一种方式,在这个基础上个人认为对于一些权限要求简单的场景,可以使用zuul网关集成权鉴功能验证Token,好处是内网微服务可以完全抛开权限更专注于业务逻辑,而zuul网关本身就是访问入口,由它来负责鉴权工作也正为合适。基于这个设想我搭建了一套de... 阅读详情
1.项目概要
这一章节的内容以第七章的代码为基础改造而成 https://github.com/kwang2003/springcloud-study-ch08.git 。
通过第八章的学习,我们已经已经基于JWT升级了OAuth2认证服务器,在这个章节中,我们将给之前的zuul网关上加上OAuth2认证功能,让所有的访问都经过一次安全认证后才能继续。系统架构和上章一样,保持不变

2.OAuth2项目改动
a)为oauth2项目增加/uaa访问上下文
了配置以后,oauth2工程的访问地址就要加上/uaa这个上下文了,加这个上下文主要是为后一个步骤做转发规则使用
server.context-path=/uaa

b)获取public key
通过查看JwtAccessTokenConverter的源码了解到,vertify key 是对publicKey进行Base64编码后得到的一个字符串:

增加一个测试类PublicKeyTest,按照规则生成这个字符串,代码如下:

得到输出的key结果是
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoZQfHaHQEzGuWBESlrcoM9DMiVM/fHEjLG7VK3COZ1xuM49P4pC+pNY3nm+wL/WM8QQdYNjPetzCiltLdW60rQa/+osW599SkmUSGF7rYXI9y4n1N4h0k9jLBdZ9n2/5miWWPDwrbsIGgLXp/NIsH4T2Gj6lUZuMj4cskIjU8P12S5TJEQ3N+PGYBY+G8zWzYB1dr3LssqATOqv1/XH+kPEesAtaaxJsfa/SWpaxDZnM5JGSjQ1/FEjyF2e0yAKbV/NqHnIqqnucr/StFBn/sGloEs1DAj8nIMtoiklqejqJvjCSdOC75f2N3iK72DgAVZkSNtfEdsVygHiOOtBtWQIDAQAB
-----END PUBLIC KEY-----
3.网关项目改造springcloud-zuul
a)增加spring-cloud-starter-oauth2和jwt
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId>
</dependency>
b)修改系统配置项
新增jwt和oauth2的安全认证相关配置,如下
security.basic.enabled=false
security.oauth2.sso.loginPath=/login
security.oauth2.client.accessTokenUri=http://oauth2/uaa/oauth/token
security.oauth2.client.userAuthorizationUri=/uaa/oauth/authorize
security.oauth2.client.clientId=client
security.oauth2.client.clientSecret=secret
security.oauth2.resource.jwt.keyValue=\
-----BEGIN PUBLIC KEY-----\
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoZQfHaHQEzGuWBESlrcoM9DMiVM/fHEjLG7VK3COZ1xuM49P4pC+pNY3nm+wL/WM8QQdYNjPetzCiltLdW60rQa/+osW599SkmUSGF7rYXI9y4n1N4h0k9jLBdZ9n2/5miWWPDwrbsIGgLXp/NIsH4T2Gj6lUZuMj4cskIjU8P12S5TJEQ3N+PGYBY+G8zWzYB1dr3LssqATOqv1/XH+kPEesAtaaxJsfa/SWpaxDZnM5JGSjQ1/FEjyF2e0yAKbV/NqHnIqqnucr/StFBn/sGloEs1DAj8nIMtoiklqejqJvjCSdOC75f2N3iK72DgAVZkSNtfEdsVygHiOOtBtWQIDAQAB\
-----END PUBLIC KEY-----
security.oauth2.resource.id=zuul
security.oauth2.resource.serviceId=${PREFIX:}zuul
其中红色高亮部分为上个步骤通过PublicKeyTest输出的结果
c)设置ZuulApplication为ResourceServer
Oauth2中包含四个核心角色
  • Resource Owner ----通常是用户,如张三
  • Resource Server ----资源服务器,存放具体的数据,在这个项目里是Zuul(实际上是各个微服务,但是我们使用Zuul统一代理了,所以就把Resource Server设置在Zuul上了,这也是增加Zuul这一层的意义所在--我们不需要给每个微服务重复的去添加这些配置,而是在Zuul统一出口的地方添加一次就可以了)
  • Authorization Server ----认证服务器,这个项目里是springcloud-oauth2服务
  • Client ---需要使用OAuth2服务器进行集成的第三方应用,如我们的网站rrs.com要使用qq联合登录,那么rrs.com就是一个客户端Client,在项目中,client的信息定义在内存中了
使ZuulApplication成为ResourceServer非常简单,在类上增加@EnableResourceServer注解:
package com.pachiraframework.springcloud.zuul;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;

@EnableZuulProxy
@EnableResourceServer
@EnableDiscoveryClient
@SpringBootApplication
public class ZuulApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication.class, args);
}
}
并且要增加一个UserInfoRestTemplate的bean
@Bean
UserInfoRestTemplateCustomizer userInfoRestTemplateCustomizer(LoadBalancerInterceptor loadBalancerInterceptor) {
return template -> {
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
interceptors.add(loadBalancerInterceptor);
AccessTokenProviderChain accessTokenProviderChain = Stream
.of(new AuthorizationCodeAccessTokenProvider(), new ImplicitAccessTokenProvider(),
new ResourceOwnerPasswordAccessTokenProvider(), new ClientCredentialsAccessTokenProvider())
.peek(tp -> tp.setInterceptors(interceptors))
.collect(Collectors.collectingAndThen(Collectors.toList(), AccessTokenProviderChain::new));
template.setAccessTokenProvider(accessTokenProviderChain);
};
}

d)增加一个DynamicOauth2ClientContextFilter

f)增加安全配置SecurityConfiguration
package com.pachiraframework.springcloud.zuul.config;

import java.io.IOException;
import java.util.regex.Pattern;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.annotation.Order;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.oauth2.client.filter.OAuth2ClientContextFilter;
import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationManager;
import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter;
import org.springframework.security.oauth2.provider.token.ResourceServerTokenServices;
import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter;
import org.springframework.security.web.csrf.CsrfFilter;
import org.springframework.security.web.csrf.CsrfToken;
import org.springframework.security.web.csrf.CsrfTokenRepository;
import org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import org.springframework.security.web.util.matcher.RequestMatcher;
import org.springframework.web.filter.OncePerRequestFilter;

@Configuration
@EnableOAuth2Sso
@Order(value = 0)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
private static final String CSRF_COOKIE_NAME = "XSRF-TOKEN";
private static final String CSRF_HEADER_NAME = "X-XSRF-TOKEN";

@Autowired
private ResourceServerTokenServices resourceServerTokenServices;

@Bean
@Primary
public OAuth2ClientContextFilter dynamicOauth2ClientContextFilter() {
return new DynamicOauth2ClientContextFilter();
}

@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/uaa/**", "/login").permitAll().anyRequest().authenticated()
.and()
.csrf().requireCsrfProtectionMatcher(csrfRequestMatcher()).csrfTokenRepository(csrfTokenRepository())
.and()
.addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)
.addFilterAfter(oAuth2AuthenticationProcessingFilter(), AbstractPreAuthenticatedProcessingFilter.class)
.logout().permitAll()
.logoutSuccessUrl("/");
}

private OAuth2AuthenticationProcessingFilter oAuth2AuthenticationProcessingFilter() {
OAuth2AuthenticationProcessingFilter oAuth2AuthenticationProcessingFilter =
new OAuth2AuthenticationProcessingFilter();
oAuth2AuthenticationProcessingFilter.setAuthenticationManager(oauthAuthenticationManager());
oAuth2AuthenticationProcessingFilter.setStateless(false);

return oAuth2AuthenticationProcessingFilter;
}


private AuthenticationManager oauthAuthenticationManager() {
OAuth2AuthenticationManager oAuth2AuthenticationManager = new OAuth2AuthenticationManager();
oAuth2AuthenticationManager.setResourceId("zuul");
oAuth2AuthenticationManager.setTokenServices(resourceServerTokenServices);
oAuth2AuthenticationManager.setClientDetailsService(null);

return oAuth2AuthenticationManager;
}

private RequestMatcher csrfRequestMatcher() {
return new RequestMatcher() {
// Always allow the HTTP GET method
private final Pattern allowedMethods = Pattern.compile("^(GET|HEAD|OPTIONS|TRACE)$");

// Disable CSFR protection on the following urls:
private final AntPathRequestMatcher[] requestMatchers = { new AntPathRequestMatcher("/uaa/**") };

@Override
public boolean matches(HttpServletRequest request) {
if (allowedMethods.matcher(request.getMethod()).matches()) {
return false;
}

for (AntPathRequestMatcher matcher : requestMatchers) {
if (matcher.matches(request)) {
return false;
}
}
return true;
}
};
}

private static Filter csrfHeaderFilter() {
return new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class.getName());
if (csrf != null) {
Cookie cookie = new Cookie(CSRF_COOKIE_NAME, csrf.getToken());
cookie.setPath("/");
cookie.setSecure(true);
response.addCookie(cookie);
}
filterChain.doFilter(request, response);
}
};
}

private static CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName(CSRF_HEADER_NAME);
return repository;
}
}
4.测试访问
本机地址是10.130.52.113(使用localhost访问会有问题, 具体原因尚未弄清楚)


SpringBoot OAuth2.0认证管理流程详解 OAuth2.0是一个开放的授权协议,可以用来实现第三方应用对我们API的访问控制,OAuth2.0中定义的角色包括: 1) Resource Owner(资源拥有者) 2) Client (第三方接入平台,请求者) 3) Resource Server (服务器资源: 数据中心) 4) Authorization Server (认证服务器) 授权认证的基本流程包括: 首先Client需要向Resource Ow...... 阅读详情

相关推荐

SpringBoot集成SpringSecurity5和OAuth2 — 2、OAuth2客户端【SSO单点登录时作为客户端】

SpringBoot集成SpringSecurity5和OAuth2 — 2、OAuth2客户端【SSO单点登录时作为客户端】

Mr_XiMu的博客 3742

(二)、Spring Security OAuth2 四个常用注解说明

更多相关文章请见:Spring Security文章目录   1、模块说明: 资源服务:提供资源访问 认证授权服务:提供认证和授权服务 客户端:请求资源服务的OAuth2 客户端 应用系统:提供应用能力的系统,在单点登录sso场景下,每一个需要认证授权服务认证授权的系统,就是一个应用系统。 2、常用注解: spring security oauth2 提供了四个常用注解,来辅助oau...

qq_30062125的博客 5898

Spring Boot 3 极速搭建OAuth2认证框架

使用 Spring Authorization Server 的较高版本,简单的状况只需要在 application.yml 配置就可以实现认证服务器, 如果要更详细的配置,也可以定义 SecurityConfig.java 进行配置。Spring Authorization Server支持四种授权方式, 简单起见,这里使用 客户端模式(Client Credentials),这种模式使用在API调用的授权上,这里使用 Postman进行验证。定义一个REST的控制器,并且写一个简单的映射方法。

oscar999的专栏 2595

Spring Cloud OAuth2授权服务器详解

Spring Cloud Security OAuth2 授权服务器允许自定义用户服务,以支持不同的用户存储方式,如数据库、缓存等。集成 Spring Cloud Bus:使用 Spring Cloud Bus 实现用户服务的分布式部署。集成 Spring Cloud Sleuth:使用 Spring Cloud Sleuth 对用户服务进行追踪和监控。集成 Spring Cloud Stream:使用 Spring Cloud Stream 实现用户服务的消息驱动。

MoneyHacksPro的博客 1117

Spring Cloud OAuth2认证授权实现详解

接下来,我们需要定义授权服务器的安全策略,以及如何使用Spring Security来保护我们的端点。通常,这涉及到扩展类,并重写其配置方法:@Autowired@Autowired@Override@Override以上代码片段演示了如何配置内存中客户端详情服务,其中定义了一个名为myclient的客户端,它具有特定的授权类型和作用域。此外,配置了授权服务器端点的安全策略,包括认证管理器和令牌服务。为了提供更好的用户体验和错误处理,可以自定义异常处理器。

weixin_36474966的博客 881

abaqus热力耦合模拟教程学习笔记

学习资源:BV1je4y1a7Ku软件:abaqus2016以m为单位制。

qq_41900477的博客 2万+

OAuth 2 开发人员指南(Spring security oauth2)

  这是支持OAuth2.0的用户指南。对于OAuth1.0,一切都是不同的,所以看它的用户指南。 本用户指南分为两个部分,第一部分是OAuth2.0提供端(OAuth 2.0 Provider),第二部分是OAuth2.0的客户端(OAuth 2.0 Client) OAuth2.0提供端 OAuth2.0的提供端的用途是负责将受保护的资源暴露出去。配置包括建立一个可以访问受保护的资源...

u014624659的博客 297

用C++从零复刻Wordle:手把手教你实现命令行猜词游戏(含完整源码解析)

本文详细介绍了如何使用C++从零开始实现一个命令行版本的Wordle猜词游戏,包含完整的源码解析和核心模块设计。通过游戏逻辑控制器、单词库管理器等模块的构建,开发者可以学习C++实战技巧和性能优化方法,适合提升编程能力和游戏开发兴趣。

weixin_26763955的博客 334

Spring Cloud Oauth2 快速入门

一、基于内存+token方式 1.认证中心配置 引入依赖 <!-- eureka 客户端依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> &l

a254124185的博客 579

Claude Code VSCode集成开发指南:AI编程助手完整配置

Claude Code与Visual Studio Code的深度集成为开发者提供了强大的AI编程支持。本文详细介绍Claude Code VSCode扩展的安装配置、功能特性和实际应用方法。通过完整的配置流程和代码示例,帮助开发者充分利用Claude AI的智能编程能力。文章涵盖从环境搭建到高级功能应用的完整指南,包括代码自动补全、智能重构、实时代码分析等核心功能的使用技巧,以及与现有开发工作流的整合方案。

2501_93058131的博客 5982

雷达工程师避坑指南:STAP处理中,间歇采样转发干扰为什么这么难对付?

本文深入解析了STAP处理中间歇采样转发干扰(ISRJ)的挑战与应对策略。通过分析ISRJ的工作机制和自由度消耗问题,结合仿真数据对比,揭示了其与传统压制干扰的本质差异。文章还探讨了在工程实践中如何构建有效的防御体系,包括降维处理技术选择和混合架构设计,为雷达工程师提供了实用的避坑指南。

weixin_30530339的博客 268

SpringCloud微服务安全(三)网关安全 3-3 搭建OAuth2 认证服务器

1. OAuth2 的角色和流程 2. OAuth2 认证服务器搭建 2.1 创建认证服务器工程 (1)创建is-server-auth 认证服务器工程 (2)pom.xml 依赖 以下是使用 OAuth2 的主要依赖配置 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-star

喜欢历史的码农 1047

rk3588调试imx415记录

分享适配imx415的软件配置以及一些关键的调试命令

m0_60805802的博客 2889

Spring Security OAuth2的简单认识

1.OAuth2.0介绍 OAuth(Open Authorization) 是一个关于授权(authorization)的网络开发标准,允许用户授权第三方应用访问他们存储在另外的服务提供者的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。OAuth在全世界得到广泛应用,目前最新的版本是2.0。 OAuth协议:https://tools.ietf.org/html/rfc6749 协议特点 简单,不管是OAuth服务供者还是应用开发者,都容易理解和使用 安全,没有使用到用户密匙等信

weixin_45956666的博客 883

AI挖矿技术全景解析:从智能勘探到自主开采的2025年度技术演进与产业变革

随着全球关键矿产资源需求激增与开采难度加剧,人工智能(AI)技术正在重塑矿业全生命周期。本文系统综述了2025年AI挖矿技术的最新进展,涵盖从地质勘探、资源评估到自主开采、安全监控的完整技术链条。基于Elsevier 2025年发表的最新研究成果及IEEE会议前沿动态,本文深入分析了深度学习、强化学习、计算机视觉等核心技术在矿物识别、品位预测、设备维护等场景的应用机制。研究数据显示,AI技术已使勘探成功率提升45%,设备停机时间减少35%,整体运营效率提高40%以上。

nmdbbzcl的博客 2082

Serial RapidIO Gen2 IP 说明(一)

概述 高速IO(RapidIO)互联架构,用来兼容当前最流行的集成通信处理器、主处理器、联网的数字信号处理器,是一种高性能、分组交换(报文交换)的互联技术。它解决了高性能嵌入式产业稳定性、高带宽以及系统内部更快的总线速率的需求。 高速IO(RapidIO)标准由三层定义:逻辑层、传输层、物理层。逻辑层定义了所有的协议内容和报文格式。这些是终端发起和完成一次传输所必需的信息。传输层提供了报文从一个端点传输到另外一个端点必要的路线信息。物理层则描述了设备级的端口声明,如报...

记录所学,分享知识,结识挚友 1497

oauth2 单点登录_Spring Security Oauth2 单点登录配置及原理深度剖析

单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。随着企业各系统越来越多,如办公自动化(OA)系统,财务管理系统,档案管理系统,信息查询系统...

weixin_39669701的博客 556

yandex 不定长旋转验证码PPOCR识别案例

可以看到,此种验证码非常变态,旋转角度不固定,干扰背景不固定,字符长度不固定,弯曲形变都是不固定的,在人眼都很难分辨验证码的情况下,其实都是对于模型来讲,也是比较困难的哈哈,传统验证码可能小几百张就能达到很好的效果了,是因为,验证码难度比较简单,通常都是4,6位定长,但是对于模型而言,无非就是增加数据量。由于该验证码的复杂度,自己写一个rcnn或者其他模型,来优化改数据集进行训练变的尤为困难复杂,所以这里强烈推荐百度飞桨的开源模型。在得到较好的loss后,导出模型。如有侵犯,请联系作者下架。

码王吴彦祖的博客 723

5 客户端认证 OAuth2ClientAuthenticationFilter

当访问 OAuth2 相关接口时,授权服务器需要进行客户端认证。Spring Authorization Server 支持如下五种客户端认证方式:client_secret_basic、client_secret_post、client_secret_jwt、private_key_jwt、none (public clients)。核心拦截器为 OAuth2ClientAuthenticationFilter

Markix的博客 4225

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

spring-security-oauth2客户端@EnableOauth2Sso注解过滤器整理

[img]http://dl2.iteye.com/upload/attachment/0127/7118/4005789e-9308-3fe7-b1a6-50c0601416f3.jpg[/img] 目前使用 @EnableOauth2Sso注解以及 securityConfiguration 配置 security 拦截器有13道 分别是 [list] [size=large][b...

大大头 3095

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SpringSecurity Oauth2实战一

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

hc312455392的博客 960

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

springboot2集成oauth2坑二(The bean 'scopedTarget.oauth2ClientContext', defined in class path resource )

由于使用Enableoauth2sso注解一直报错,报错原因见上一篇文章《springboot2集成oauth2坑一》 后面换成了@EnableOAuth2Client注解,并自定义了相关配置 @Bean public FilterRegistrationBean oauth2ClientFilterRegistration(OAuth2ClientContextFilter filte...

lipeng的博客 9804

Zuul + OAuth2.0 + JWT 实现单点登录

文章目录1. 应用权限概述1.1 自定义权限认证Filter1.2 OAuth2.0 + JWT2. Zuul + OAuth2.0 + JWT 实战2.1 zuul-server编写2.2 auth-server编写2.3 user服务编写2.4 测试 本文内容出自《重新定义Spring Cloud实战》 1. 应用权限概述 权限,是整个微服务体系乃至软件业永恒的话题,有资源的地方,就有权限...

qq_24095055的博客 4994

分布式系统认证解决方案SpringSecurityOAuth2.0(二)分布式系统认证流程分析与实现

目录一、简介1.1 OAuth2.0协议角色1.2 SpringSecurityOAuth2.01.3 授权服务 Authorization Server1.4 资源服务 Resource Server二、认证流程三、授权服务器——代码实现3.1 主要依赖3.2 AuthorizationServer3.2.1 配置客户端详情信息3.2.2 配置令牌的服务端点及令牌管理服务3.2.3 配置令牌服务端点的安全约束3.2.4 总结三、授权服务器——测试3.1 授权码模式示例申请授权同意授权拒绝授权申请令牌3.2

DreamsArchitects的博客 1506

SpringCloud+Spring Security+OAuth2授权登录(三)

上回书说到,认证服务器为了美观和良好的用户体验,修改了登录页面和返回登录失败的信息。本回就讲讲,认证客户端或者称之为资源服务器自定义权限认证和为移动端做的修改。 一般来说,像通过微信授权登录的系统都是有一套自己的权限体系的,微信那边只是拿到一个用户的信息。所以这里判断用户对应自己系统内部的权限需要开发者自行解决。 @Component public class CustomPermission { /** * permission 获取接口设置的权限 */ public

Michael Zhan的博客 538
上一篇: 第八章 SpringCloud Oauth2认证中心-基于JWT认证
CrazyCoder2010
博客等级 码龄16年 298粉丝 110原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值