Spring Boot 2应用程序和OAuth 2 –设置授权服务器

这将是3个系列文章,探讨如何为基于Spring Boot 2的应用程序启用具有OAuth2提供程序的SSO。 我将在这些帖子中介绍以下内容:

1.引导兼容OpenID Connect的OAuth2授权服务器/ OpenID提供程序的方法。

2.传统的Spring Boot / Spring 5与OAuth2授权服务器/ OpenID Provider集成的方法。

3.与OAuth2授权服务器/ OpenID Provider集成的更新的Spring Boot 2 / Spring 5方法。

这篇文章将介绍引导在本地计算机上运行的OpenID Connect兼容OAuth2授权服务器的方法。

该帖子本质上是对以前的帖子的重述,该帖子详细介绍了使用出色的Cloud Foundry UAA项目引导OAuth2授权服务器的过程。 自从我上一篇文章以来,已经进行了一些更改,我想重新捕获启动授权服务器的步骤,并稍加强调使其与OpenID Connect兼容。

获得强大的OAuth2授权服务器运行的本地版本的最佳方法是使用出色的Cloud Foundry UAA项目。

步骤1 :克隆项目:

git clone https://github.com/cloudfoundry/uaa

第2步 :生成密钥对

UAA可以使用非对称RSA密钥对进行签名,并让客户端验证签名。 我这里有一个方便的脚本,该脚本可生成密钥对并生成可用于引导UAA的配置文件:

运行时,它将执行如下所示的UAA配置:

jwt:token:signing-key: |-----BEGIN RSA PRIVATE KEY-----MIIEpAIBAAKCAQEAuE5Ds...5Nka1vOTnjDgKIfsNNTAI25qNNCZOXXnGp71gMWsXcLFq4JDJTovL4/rzPIip/1xU0LjFSw==-----END RSA PRIVATE KEY-----verification-key: |-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuE5DsCmjfvWArlCIOL6nZwIDAQAB-----END PUBLIC KEY-----

步骤3 :使用配置启动UAA服务器:

UAA_CONFIG_URL=file://$PWD/uaa_config.yml ./gradlew run

步骤4 :验证

验证UAA是否已启动的一种快速方法是检查JWKS_URI,这是一个端点,它公开了一组客户端可用来验证令牌的验证密钥。 对于UAA,可以在“ / token_keys”端点使用curl或httpie验证此端点:

http GET http://localhost:8080/uaa/token_keys# ORcurl http://localhost:8080/uaa/token_keys

如果一切都配置正确,则此端点期望输出以下形式:

{"keys": [{"alg": "RS256","e": "AQAB","kid": "legacy-token-key","kty": "RSA","n": "APLeBV3dcUrWuVEXRyFzNaOTeKOLwFjscxbWFGofCkxrp3r0nRbBBb4ElG4qYzmbStg5o-zXAPCOu7Pqy2j4PtC3OxLHWnKsflNOEWTeXhLkPE0IptHPbc6zgVPP3EoiG_umpm0BYeJPZZc-7tA11uU_3NqidY9wnpOgKBuwNmdoyUrjb4fBDoMr_Wk2_sn_mtHSG8HaX8eJ9SbC9xRCJySjJDApOYR_dKjuwpbcM2ITfbTzD9M2J7yOtoJRkFhd1Ug2t_6AA_z47BBws-x9BBfSNbYGsVlDAbe6NK_jUE","use": "sig","value": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8t4FXd1xSta5URdHIXM1\no5N4o4vAWOxzFtYUah8KTGunevSdFsEFvgSUbipjOZtK2Dmj7NcA8I67s+rLaPg+\n0Lc7Esdacqx+U04RZN5eEuQ8TQim0c9tzrOBU8/cSiIb+6ambQF62glGQWF3VSDa3/oAD/PjsEHCz7H0EF9I1tgaxWUMBt7o0r+N\nQQIDAQAB\n-----END PUBLIC KEY-----"}]
}

步骤5 :填充数据

UAA有一个名为uaac的随附CLI应用程序,可从此处获得 。 假设您已经下载了uaac cli,并且UAA在其默认端口8080上启动,那么让我们首先将uaac指向uaa应用程序:

uaac target http://localhost:8080/uaa

并使用罐装客户端凭据之一(admin / adminsecret)登录:

uaac token client get admin -s adminsecret

现在,客户端已登录,可以使用以下方式探索令牌:

uaac token decode

其中应显示已登录客户端的详细信息:

jti: 4457847692b7464ca0320f08271a9e98sub: adminauthorities: clients.read clients.secret clients.write uaa.admin clients.admin scim.write scim.readscope: clients.read clients.secret clients.write uaa.admin clients.admin scim.write scim.readclient_id: admincid: adminazp: admingrant_type: client_credentialsrev_sig: 3c12911iat: 1518332992exp: 1518376192iss: http://localhost:8080/uaa/oauth/tokenzid: uaa

可以使用以下命令获取原始jwt令牌:

uaac context

输出看起来像这样:

[3]*[http://localhost:8080/uaa]skip_ssl_validation: true[2]*[admin]client_id: adminaccess_token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImxlZ2FjeS10b2tlbi1rZXkiLCJ0eXAiOiJKV1QifQ.eyJqdGkiOiI0NDU3ODQ3NjkyYjc0NjRjYTAzMjBmMDgyNzFhOWU5OCIsInN1YiI6ImFkbWluIiwiYXV0aG9yaXRpZXMiOlsiY2xpZW50cy5yZWFkIiwiY2xpZW50cy5zZWNyZXQiLCJjbGllbnRzLndyaXRlIiwidWFhLmFkbWluIiwiY2xpZW50cy5hZG1pbiIsInNjaW0ud3JpdGUiLCJzY2ltLnJlYWQiXSwic2NvcGUiOlsiY2xpZW50cy5yZWFkIiwiY2xpZW50cy5zZWNyZXQiLCJjbGllbnRzLndyaXRlIiwidWFhLmFkbWluIiwiY2xpZW50cy5hZG1pbiIsInNjaW0ud3JpdGUiLCJzY2ltLnJlYWQiXSwiY2xpZW50X2lkIjoiYWRtaW4iLCJjaWQiOiJhZG1pbiIsImF6cCI6ImFkbWluIiwiZ3JhbnRfdHlwZSI6ImNsaWVudF9jcmVkZW50aWFscyIsInJldl9zaWciOiIzYzEyOTExIiwiaWF0IjoxNTE4MzMyOTkyLCJleHAiOjE1MTgzNzYxOTIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC91YWEvb2F1dGgvdG9rZW4iLCJ6aWQiOiJ1YWEiLCJhdWQiOlsic2NpbSIsImNsaWVudHMiLCJ1YWEiLCJhZG1pbiJdfQ.ZEcUc4SvuwQYwdE0OeG5-l8Jh1HsP0JFI3aCob8A1zOcGOGjqso4j1-k_Lzm__pGZ702v4_CkoXOBXoqaaRbfVgJybBvOWbWsUZupMVMlEsyaR_j8DWY8utFAIiN2EsQgjG3qLrsf0K8lm0I3_UIEjaNZhSkWSLDLyY9wr_2SRanSf8LkcEJoSTTgDdO0aP8MvwNpDG7iQ2Om1HZEN08Bed1hHj6e1E277d9Kw7gutgCBht5GZDPFnI6Rjn0O5wimgrAa6FEDjdCpR7hy2P5RiOTcTvjj3rXtVJyVcQcxGKymZrY2WOx1mIEzEIAj8NYlw0TLuSVVOiNZ9fKlRiMpwtoken_type: bearerexpires_in: 43199scope: clients.read clients.secret clients.write uaa.admin clients.admin scim.write scim.readjti: 4457847692b7464ca0320f08271a9e98

最后,添加一个具有client1 / client1信誉的客户端和一个具有user1 / user1信誉的用户:

uaac client add client1 \--name client1 \--scope resource.read,resource.write,openid \-s client1 \--authorized_grant_types authorization_code,refresh_token,client_credentials,password \--authorities uaa.resource \--redirect_uri http://localhost:8888/**# Add a user called user1/user1
uaac user add user1 -p user1 --emails user1@user1.com# Add two scopes resource.read, resource.write
uaac group add resource.read
uaac group add resource.write# Assign user1 both resource.read, resource.write scopes..
uaac member add resource.read user1
uaac member add resource.write user1

至此,我们有了一个工作正常的授权服务器,其中包含一个示例客户端和一个示例用户。 随后的文章将使用这些数据来启用对示例Spring Boot2应用程序的身份验证。 当我完成较新的文章时,我将更新此文章中的链接。

翻译自: https://www.javacodegeeks.com/2018/02/spring-boot-2-applications-oauth-2-setting-authorization-server.html

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

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

相关文章

win7计算机管理找不到文件夹,Win7系统打开组策略提示找不到文件gpedit.msc怎么办...

组策略是Windows系统管理员为用户和计算机定义并控制程序、网络资源及操作系统行为的主要工具,不过有win7旗舰版系统用户在打开组策略的时候,却提示“找不到文件gpedit.msc,请确定文件名是否正确后,再试一次”,该如何解…

mysql 授权用户_MySQL创建用户与授权

一. 创建用户命令:CREATE USER usernamehost IDENTIFIED BY password;说明:username:你将创建的用户名host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆&#…

Java基本语法(9)--逻辑运算符(逻辑短路)与或非

逻辑与——&——都为true才为true,有一false就为false,符号两边都看 短路与——&&——都为true才为true,有一false就为false,前面有false就略后面 逻辑或——|——有一true就为true,符合两边都看 短路或—…

计算机管理设置,win10系统打开计算机管理的设置步骤

win10系统使用久了,好多网友反馈说关于对win10系统打开计算机管理设置的方法,在使用win10系统的过程中经常不知道如何去对win10系统打开计算机管理进行设置,有什么好的办法去设置win10系统打开计算机管理呢?在这里小编教你只需要 …

Java基本语法(10)--位运算符

位运算符的使用对象是数&#xff0c;位运算是直接对整数的二进制进行的运算&#xff0c;理解必须要在二进制层面进行。 功能说明&#xff1a; 每<<左移1位&#xff0c;乘一次2&#xff08;低位补0&#xff09; 每>>右移一位&#xff0c;除一次2&#xff0c;符号位…

jsp servlet示例_Servlet和JSP中的文件上传示例

jsp servlet示例使用Servlet和JSP将文件上传到服务器是Java Web应用程序中的常见任务。 在对Servlet或JSP进行编码以处理文件上传请求之前&#xff0c;您需要了解一点有关HTML和HTTP协议中文件上传支持的知识。 如果要让用户从文件系统中选择文件并上传到服务器&#xff0c;则需…

天津市电子计算机职业学院,天津市电子计算机职业中等专业学校

天津市电子计算机职业中等专业学校天津市城市职业学院河西分院天津市河西区社区学院学校概况天津市电子计算机职专创建于1(本文共1页)阅读全文>>天津市电子计算机职业中等专业学校是国家中等职业教育改革发展示范校,学校始终坚持"植根社会、服务经济、适应市场、成人…

Java基本语法(11)--三元运算符

格式结构&#xff1a;&#xff08;条件表达式&#xff09;&#xff1f;表达式1&#xff1a;表达式2&#xff1b; 条件表达式结果为boolean型&#xff0c;如果为true&#xff0c;则执行表达式1&#xff0c;如果为false&#xff0c;则执行表达式2。 表达式1和表达式2的结果应该…

mysql表主键类型_mysql表结构主键类型

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

功能Java示例 第3部分–不要使用异常来控制流程

这是称为“ Functional Java by Example”的系列文章的第3部分。 我在本系列的每个部分中发展的示例是某种“提要处理程序”&#xff0c;用于处理文档。 在前面的部分中&#xff0c;我从一些原始代码开始&#xff0c;并应用了一些重构来描述“什么”而不是“如何”。 为了帮助…

安全模式打开计算机策略,安全模式下怎么解除组策略的锁定?

2006-01-13注册表被锁住了&#xff0c;组策略也被禁用&#xff0c;安全模式也进不了&#xff0c;该如何修改注册表随便从网络上下在一个注册表编辑器,展开[hkey-current-user\software\microsoft\windows\current version\policies\system]主键,将键名 disableregistrytools 的…

Java基本语法(12)--分支结构if-else

基本格式结构 if (条件语句){条件语句为true时&#xff0c;进入执行的语句&#xff1b; }else{条件语句为false时&#xff0c;执行的语句&#xff1b; }if (条件语句1){条件语句1为true时&#xff0c;进入执行的语句&#xff1b; }else if(条件语句2){条件语句1为false&#x…

dense rank改为mysql_mysql上排名sql的写法,类似oracle的rank和dense

这几天开发提交了几个排名的sql&#xff0c;oracle环境下这类问题就很好解决了&#xff0c;row_number()&#xff0c;rank()或者dense()函数就能搞定&#xff0c;但mysql环境下没有这类函数&#xff0c;那就自己搞&#xff1a;测试如下&#xff1a;mysql> select * from ani…

服务器硬盘 主板,服务器主板和普通主板有什么区别?

什么是工控服务器?首先我们来看专业上服务器是怎样定义的&#xff1a;工控服务器是一种高性能计算机&#xff0c;作为网络的节点&#xff0c;存储、处理网络上80%的数据、信息&#xff0c;因此也被称为网络的灵魂。也可以这样讲&#xff0c;工控服务器是指一个管理资源并为用户…

键盘输入Scanner类方法属性使用

基本步骤 1.导包&#xff1a;import java.util.Scanner 2.Scanner实例化&#xff0c;创建Scanner对象&#xff1a; Scanner scan new Scanner(System.in) 3.调用Scanner类相关方法&#xff08;next&#xff08;&#xff09;/nextXxx()&#xff09;&#xff0c;来获取指定数据类…

mysql存储过程是不是不能穿sql语句_mysql存储过程能不能直接执行拼接的sql语句...

展开全部当然可以&#xff0c;就是在mysql存储过程中使用动态sql&#xff0c;就可以拼接sql&#xff0c;然62616964757a686964616fe58685e5aeb931333361323562后执行了。给你复制一段&#xff0c;如果不满意&#xff0c;自己搜索 mysql 存储过程 动态sql 就可以了DROP PROCEDU…

服务器系统授权,授权方案说明

我们提供的授权方案有三种&#xff1a;公网授权、加密狗授权、系统序列号SN授权。1. 公网授权如果您的应用服务器可以访问公网&#xff0c;即可使用这种方式。您的服务端在启动运行的时候&#xff0c;会主动访问我们的授权服务器进行合法认证。2. 加密狗授权如果您的应用服务器…

jdk8 参数为方法_JDK 8中的几乎命名的方法参数

jdk8 参数为方法有时在Java中命名方法参数确实很不错&#xff0c;这看起来可能已经很长时间了&#xff0c;但是始终还有其他一些解决方法&#xff0c;例如使用构建器模式来获得类似的行为&#xff0c;这将为一点点。 在我看来&#xff0c;使用JDK 8中的Lambda支持可以使您获得非…

Math.random()获取随机数

调用该方法返回一个double值&#xff0c;为正号&#xff0c;大于等于0.0 &#xff0c;小于1.0 。 [0.0&#xff0c;1.0) 返回的值是从该范围&#xff08;大约&#xff09;均匀分布而伪随机选择的。 示例&#xff1a;获取一个[10&#xff0c;99]的随机数 public class JavaTest…

传奇霸业维护服务器,37传奇霸业8月18日部分区服维护计划

亲爱的玩家:您好&#xff0c;为保证服务器稳定运营&#xff0c;优化游戏体验&#xff0c;《传奇霸业》新版本“炼狱魔域”将代替旧版本“超霸传奇”继续向各大玩家提供游戏服务&#xff0c; 我们将在2016年8月18日对以下区服进行停服维护更新&#xff0c;具体维护时间将视情况提…