使用OAuth 2 / OpenID Connect的SSO的Spring Boot 2本机方法

这篇文章是3篇系列文章的最后一部分,该系列文章探讨了如何为基于Spring Boot 2的应用程序启用OAuth2提供程序SSO。 3个帖子是:

  1. 引导兼容OpenID Connect的OAuth2授权服务器/ OpenID提供程序的方法
  2. 与OAuth2授权服务器/ OpenID提供程序集成的旧版Spring Boot / Spring 5方法
  3. 与OAuth2授权服务器/ OpenID Connect提供商集成的更新的Spring Boot 2 / Spring 5方法–这篇文章

这篇文章将探讨使用Spring Security中的本机OAuth2支持为Spring Boot 2应用程序启用SSO的崭新方法。

该文章再次假定第一篇文章中描述的所有内容均已完成。

Spring Boot 2自动配置

Spring Boot 2为Spring Security中的本机OAuth2支持提供了自动配置(请参见org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientAutoConfiguration类)。

通过以下gradle坐标可用的“ spring-security-oauth2-client”库激活了自动配置:

compile "org.springframework.security:spring-security-oauth2-client"

此自动配置会处理一组属性,对于已启动的UAA身份提供程序,该组属性如下:

uaa-base-url: http://localhost:8080/uaaspring:security:oauth2:client:registration:uaa:client-id: client1client-secret: client1authorizationGrantType: authorization_coderedirect_uri_template: "{baseUrl}/login/oauth2/code/{registrationId}"scope: resource.read,resource.write,openid,profileclientName: oauth2-sample-clientprovider:uaa:token-uri: ${uaa-base-url}/oauth/tokenauthorization-uri: ${uaa-base-url}/oauth/authorizeuser-info-uri: ${uaa-base-url}/userinfojwk-set-uri: ${uaa-base-url}/token_keysuserNameAttribute: user_name

如果要依靠Spring Boot 2自动配置支持来实现对本机OAuth2的支持,并实现应用程序的启动,那么在访问应用程序时将看到以下页面:

请注意,此登录页面是由Spring Security OAuth2创建的默认页面,默认情况下会显示注册列表。

单击“ oauth2-sample-client”,将显示身份提供者(在这种情况下,UAA)的登录页面:

对于基于OpenID Connect的流程,应用程序将获得ID令牌以及我正在解码并呈现在页面上的Access令牌:

客制化

我要进行的快速自定义之一是在访问通过“ / secured” uri模式指定的任何受保护页面时重定向到UAA,以下是一组应启用此配置的配置:

package sample.oauth2.configimport org.springframework.context.annotation.Configuration
import org.springframework.security.config.annotation.web.builders.HttpSecurity
import org.springframework.security.config.annotation.web.builders.WebSecurity
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter@Configuration
class OAuth2SecurityConfig : WebSecurityConfigurerAdapter() {override fun configure(web: WebSecurity) {super.configure(web)web.ignoring().mvcMatchers("/favicon.ico","/webjars/**","/css/**")}override fun configure(http: HttpSecurity) {http.csrf().disable()http.authorizeRequests().antMatchers("/secured/**").authenticated().antMatchers("/", "/custom_login").permitAll().anyRequest().authenticated().and().oauth2Login().loginPage("/custom_login")}
}

请参阅上面设置为“ / custom_login”的URI,依次将控制权简单地移交给OAuth2控制的端点,这些端点知道设置适当的参数并重定向到UAA:

@Controller
class LoginController {@RequestMapping("/custom_login")fun loginPage(): String {return "redirect:/oauth2/authorization/uaa"}
}

到此结束对Spring Boo2应用程序中对本机OAuth2支持的探索。

所有示例都可以在我的github存储库中找到 – https://github.com/bijukunjummen/oauth2-boot2

以下参考资料有助于理解OAuth2支持:

1. Spring安全性文档 – https://docs.spring.io/spring-security/site/docs/current/reference/html/

2. Joe Grandja的 Spring One Platform 2017演示文稿 – https://www.youtube.com/watch?v=WhrOCurxFWU

翻译自: https://www.javacodegeeks.com/2018/03/spring-boot-2-native-approach-sso-oauth-2-openid-connect.html

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

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

相关文章

实现任意行数的杨辉三角

public class JavaTest {public static void main(String[] args) {//放置杨辉三角的数组&#xff0c;可通过更改new int[n][]中n的值以获取不同行数的杨辉三角int[][] yangItem new int[10][];//获取杨辉三角数组中每个元素的值for (int i 0;i < yangItem.length;i){//当…

java excel sheet页_Java导出Excel Sheet页

1、问题背景导出Excel表格时&#xff0c;首先要生成Sheet页&#xff0c;下面将介绍如何生成Sheet页2、实现源码/**** Project:* Title:ExcelExport.java* Package:report.utils* Description:* Author:YouHaiDong* Date:2015年11月2日 下午6:29:22* Version:*/package report.u…

鸿蒙与安卓系统简单对比,绝非追求三分天下。

鸿蒙是面向5G物联网、面向全场景的分布式操作系统&#xff0c;其不是安卓系统的分支或修改而来的&#xff0c;与安卓、iOS是不一样的操作系统。鸿蒙将打通手机、电脑、平板、电视、电器设备、工业自动化控制、无人驾驶、车机设备 、智能穿戴统一成一个操作系统&#xff0c;并且…

(0.1)鸿蒙HarmonyOS开发工具DevEco Studio设置

1、打开设置操作框 2.1主题设置&#xff08;可以工具自己的喜好设置主题&#xff09; 2.2设置字体 2.3设置注释 2.4设置提示语句忽略大小写&#xff08;输入小写时&#xff0c;提示语句也会出现大写的关键字等&#xff09; 2.5设置自动导包&#xff08;不用导包&#xff0c;工具…

向Java最佳专家的全球专家学习Java

Java with the Best Virtual Conference是您学习微服务&#xff0c;Java 9&#xff0c;Kubernetes以及其他Java的指南&#xff01; 将于4月17日至18日收听&#xff0c;收听来自Pivotal&#xff0c;RedHat&#xff0c;Microsoft&#xff0c;Oracle和Netflix等公司的行业领导者进…

(0.2)HarmonyOS鸿蒙开发工具DevEco Studio工程文件目录结构

1、基本不会去动添加修改的一些文件夹 2、主要直接使用操作的文件夹entry 3、开发操作main文件夹 也就是说&#xff0c;我们其实主要就只要用到java&#xff0c;resources两个文件夹和config.json一个文件。把代码放java文件夹里面&#xff0c;把开发用到的图片视频等资源放res…

(0.3)HarmonyOS鸿蒙开发工具DevEco Studio 模拟器使用

1、登录华为账号 2、打开模拟器 3、选择模拟器 4、将程序运行在模拟器 5、当下面的building进度条完成后

(1.1)HarmonyOS鸿蒙中Ability概念及意义

1、简单理解&#xff1a;在鸿蒙中&#xff0c;可以简单理解为&#xff0c;打开APP后一个页面为一个Ability&#xff0c;而一个页面里面又有很多子页面&#xff08;切片、片段&#xff09;为AbilitySlice。 2、意义 一个Ability对应一个Hap包&#xff0c;一个APP则是由多个Hap包…

Java实现冒泡排序动画展示

原理&#xff1a;每次比较两个相邻的元素&#xff0c;将较大&#xff08;较小&#xff09;的元素交换至右边。 思路&#xff1a;每次冒泡排序操作都会将相邻的两个元素进行比较&#xff0c;看是否满足大小关系要求&#xff0c;如果满足&#xff0c;就根据需要&#xff08;从小…

使用Zipkin和Sleuth进行SpringBoot微服务跟踪

在本文中&#xff0c;我们将了解使用Zipkin和Spring cloud sleuth框架的微服务分布式跟踪。 尽管微服务具有自身的挑战&#xff0c;但微服务是出色的架构。 复杂的微服务架构具有与其他微服务的下游和上游依存关系&#xff0c;并且一切都是相互联系的。 在大多数情况下&#x…

log4j性能 slf4j_Log4j 2:性能接近疯狂

log4j性能 slf4j最近&#xff0c;Apache社区中一位受人尊敬的成员尝试了Log4j 2并在Twitter上写道&#xff1a; TheASF &#xff03;log4j2摇摇欲坠 &#xff01; 性能接近疯狂^^ http://t.co/04K6F4Xkaa — Mark Struberg&#xff08;struberg&#xff09; 2013年5月7日 &a…

java 输入人名_Java 读取控制台输入

Java 提供了我们两种读取控制台输入的方法&#xff1a;一、传统方法public class ReadConsoleOld {public static void main(String[] args) throws IOException {BufferedReader reader new BufferedReader(new InputStreamReader(System.in));while(true){String line read…

JVM体系结构:JVM和JVM体系结构概述

各位读者好&#xff01; 在本教程中&#xff0c;我们将了解和学习Java虚拟机&#xff08;JVM&#xff09;及其体系结构。 本教程将帮助您正确回答以下问题&#xff1a; Java中的JVM是什么&#xff1f; JVM的不同组件 JVM&#xff0c;JRE和JDK之间的区别 1.简介 Java虚拟机&…

计算机二级web题目(7.1)--综合选择题1

(1)程序流程图中带有箭头的线段表示的是&#xff08;C&#xff09;。 A、图元关系 B、数据流 C、控制流 D、调用关系 解析&#xff1a;①长方形表示要处理执行的步骤。②菱形表示条件判断。③平行四边形表示输入或输出。 (2)结构化程序设计的基本原则不包括&#xff08;A&#…

java8 javafx_Java 8的新增功能(第1部分– JavaFX)

java8 javafx免责声明&#xff1a;我不为Oracle工作&#xff0c;也不以任何方式代表Oracle。 此功能列表不是官方的。 作为“局外人”&#xff0c;这只是我研究的一部分。 Java 8已在大约两个月前完成了功能&#xff0c;并且开发者预览版即将到来&#xff08;两周后&#xff0…

Java简单内存解析

堆&#xff08;Heap&#xff09;&#xff0c;此内存区域的唯一目的就是存放对象实例&#xff0c;几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是&#xff1a;所有的对象实例以及数组都要在堆上分配。 通常所说的栈&#xff08;Stack&#xff09;&…

servlet3异步_Servlet 3的异步Servlet功能

servlet3异步在深入了解什么是异步Servlet之前&#xff0c;让我们尝试了解为什么需要它。 假设我们有一个Servlet&#xff0c;处理时间很长&#xff0c;如下所示。 LongRunningServlet.java package com.journaldev.servlet;import java.io.IOException; import java.io.Prin…

计算机二级web题目(7.2)--基本操作题1

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 1、在考生文件夫下的Web1目录中&#xff0c;存有1.htm和label2.htm文件&#xff…

计算机二级web题目(7.3)--简单应用题1

说明&#xff1a;如有不清楚的地方&#xff0c;可以评论区留言&#xff0c;及时回复。 1、在考生文件夹下的Web3目录中&#xff0c;存有3.htm文件&#xff0c;该文件不完整&#xff0c;请在标有********Found******字符串的注释行下一语句的下划线处填入正确内容&#xff0c;然…