Spring Cloud:Eureka,Zuul和OAuth2 - 扩展授权服务器_weixin_34232744的博客-程序员宅基地

技术标签: python  java  运维  

    我们将在这里讨论一个非常实际的问题,扩展Spring OAuth2授权服务器,并更详细地描述如何使用Spring Cloud本身完成这一任务。您的授权服务器可能在单个请求处理期间被多次请求,因此您希望它能够匹配需求。 当我第一次处理这个问题时,我没有完全理解Spring Cloud提供了哪些功能,并做了一些错误的假设,所以它可能值得描述如何做一个基本的设置,发生在底下发生什么和你可能期望。

    在Spring OAuth2.0.x中,有三个非常有用的注释,可以在应用程序中启用不同的功能:

  • @EnableOAuth2Resource
  • @EnableOAuth2Sso
  • @EnableOAuth2Client

    我想更详细地介绍前两个。

    对于每个注释,都有一个必须指定的对应属性。验证令牌并检索用户信息所需的最小资源服务器配置是指定userInfoUri属性。

spring:
  oauth2:
    resource:
      userInfoUri: http://localhost:9999/uaa/user

    这将允许使用Barer令牌认证来验证传入的请求。    

    所以很可能你打算启用资源服务器可能每个微服务,你要开发。在其中一个边缘服务上,您可能需要启用单点登录。 @EnableOAuthSso将允许您将未经认证的用户的自动重定向转向授权服务器,他们将能够登录。

    类似地,您将必须指定一些额外的属性,如授权服务器令牌的地址和授权uri以及客户端凭据。我们还可以指定我们的应用程序中应该保护哪些路径。

  

spring:
  oauth2:
    sso:
      home:
        secure: true
        path: /,/**/*.html
    client:
      accessTokenUri: http://localhost:9999/uaa/oauth/token
      userAuthorizationUri: http://localhost:9999/uaa/oauth/authorize
      clientId: edge
      clientSecret: secret

    现在这是一个在单个节点上工作的最小设置(当然,您可以将授权服务器放在任何负载均衡器之后)。

    这不是全部,如果你导入spring-cloud-security模块(版本至少1.0.2)。在每个资源服务器上,自动配置类将设置OAuth2RestTemplate,这将传播身份验证令牌,如果您碰巧启用了发现客户端(通过导入Eureka客户端或Consul并正确设置它),它也将能够发现和将负载分配给注册服务。

    也可以通过自定义扩展为Feign客户端实现相同的功能。

    最后,如果将spring.oauth2.resource.loadBalanced设置为true,您将配置客户端负载平衡以从授权服务器检索用户信息(当您运行多个节点并在发现服务中注册它们时):

spring:
  oauth2:
    resource:
      loadBalanced: true
      userInfoUri: http://oauth2/uaa/user

    这个功能没有特别记录,我偶然发现它通过Spring云安全源代码。

    这已经很整洁,但是我们的单点登录怎么办?此刻,我们必须指定一个单一的地址。

    在我一直在努力的项目中,我们以两种不同的方式在两个不同的配置中解决了这个问题。在一个单页应用程序的应用程序之一,我们完全从服务器端重定向的构建中取消了,并使用AngularJS和简单的AJAX POST进行身份验证。为了工作,我们不得不启用CORS(授权服务器不做,但你可以找到一个有趣的文章如何做到这一点)或配置一个反向代理 - 如Zuul。我们选择了后者。通过简单的设置,您可以通过Zuul将授权AJAX请求路由到授权服务器:

zuul:
  ignoredServices: '*'
  routes:
    oauth2:
      path: /uaa/**
      serviceId: oauth2
      stripPrefix: false

    最后,如果要使用Spring的单点登录,您可以通过设置Zuul代理作为您的边缘网关,并正确配置到自动发现的节点的路由,用edge网关地址替换accessTokenUri和userAuthorizationUri(最好是DNS名称)。当然,没有任何理由不使用任何其他负载均衡器,特别是如果你的云提供商提供一个开箱。虽然在Zuul代理自动发现的构建是非常诱人的在这里使用。

    总而言之,对于您的“内部”通信,资源服务器可以在发现服务的帮助下使用Spring Cloud负载平衡支持中的构建。当“外部”世界需要与您的OAuth2服务器通信时,您应该在其前面放置负载均衡器,Netflix Zuul是自然的候选人,同时解决方案可以跨不同的云提供商以及容器,如Docker。

    通过这样的设置,您现在可以添加任意数量的授权服务器节点。

转载于:https://my.oschina.net/zhmlvft/blog/857152

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34232744/article/details/91927392

智能推荐

linux 系统时间乱码,对于linux系统中文乱码的解决_Batyr的博客-程序员宅基地

现象如下所示:[[email protected] ~]# ll?荤.?.92-rw-r--r-- 1 root root 1449 9?.21 11:41 anaconda-ks.cfgdrwxr-xr-x 2 root root 4096 11?.13 16:47 Desktop-rw-r--r-- 1 root root 58837 9?.21 11:41 install.log-rw-r--...

oracle health check,Oracle Health Check_郄小虎Tiger的博客-程序员宅基地

ODA Oracle Database Appliance orachk Healthcheck (Doc ID 2126926.1)Multiplexing Redolog and Control File on ODA (Doc ID 2086289.1)ORAchk – Health Checks for the Oracle Stack (Doc ID 1268927.2)How to P...

zircon内核替代linux内核,zircon 内核使用C++的原则_华语演讲网的博客-程序员宅基地

新版内核改动非常大,感觉有人写的书要大改了[偷笑]。看上数百行代码似乎就能了解其结构了。在内核里使用了C++,这么做不无代价,严格的原则很有意思。C++ in ZirconA subset of the C++14 language is used in the Zircon tree. This includes both the upper layers of the kernel (abov...

oracle imp 12541,EXP-00056: ORACLE error 12514 encountered解决方法_weixin_39849153的博客-程序员宅基地

[[email protected] emp_imp]$ exp scott/[email protected] tables=scott.dept, file='/db/ora11g/test/emp_imp/dept.dmp', log='/db/ora11g/test/emp_imp/dept.log';Export: Release 11.2.0.1.0 - Production on Wed Feb 26 21:41...

redhat 6安装mysql5.7_RedHat6.5/CentOS6.5安装Mysql5.7.20的教程详解_man One的博客-程序员宅基地

下载rpm安装包选择版本下载:可以使用wget命令下载:[[email protected] opt]#wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.20-1.el6.x86_64.rpm-bundle.tar注意RedHat的版本和系统位数。查看依赖的库[[email protected] opt]# yum search libaio[...

html div高度跟随父级,html – CSS – 相对定位父div不伸展到绝对子div高度_宇翔哥哥丶的博客-程序员宅基地

我一直在搜索这个整个上午,似乎不能让它工作:我有一个父DIV与相对定位和一个两列孩子DIV设置里面,它们都位于绝对。我需要父DIV的高度来扩展内部DIV的内容。我试着把一个.clearfix类型位在#content的结束标签之前,但我不浮动任何东西。我也试过添加一个float属性到#content div无效。任何人都可以在这里指向正确的方向。显然,我缺少一些嵌套显示如何影响彼此。CSS:#con...

随便推点

react 展示对象_JSON数据展示神器:react-json-view(常用于后台网站)_weixin_39595164的博客-程序员宅基地

一、react-json-view - npm官方定义: RJV is a React component for displaying and editing javascript arrays and JSON objects.译: RJV是一个用于显示和编辑javascript数组和JSON对象的React组件从字面意思上可知,它本质上是一个组件,和我们平时使用的自定义组件没有任何区别。只...

JVM 详细介绍_逆水行舟如何的博客-程序员宅基地_jvm详细介绍

一、JVM简介         jvm英文全称: Java Virtual Mathine(java虚拟机)         jvm世界观:java对象在jvm里的生老病死         jvm一样也是通过在实际的计算软件虚拟出来,用来模拟一套完整的运行平台        作用:是作为java编译器和不同平台之间的解释器,jvm根据不同的平台,将java编译后的目标代码(字节码)...

K&R4-3用C语言实现逆波兰计算器_Adzuki2018的博客-程序员宅基地

**逆波兰计算器****题目2:在对栈的操作中添加几个命令,用于:1 在不弹出元素的情况下打印栈顶元素****2. 复制栈顶元素 3. 交换栈顶两个元素的值 4. 清空栈**/#include <stdio.h>#include <ctype.h>#include <stdlib.h> //使用atof函数 ,将字符串转化为double 类型 #de...

ora 00312 oracle dg,关于10g DG中的ORA-19527和ORA-00312错误解决示例,o_插座学院的博客-程序员宅基地

关于10g DG中的ORA-19527和ORA-00312错误解决示例,ora-19527ora-00312这几天在搭建10g DG Windows 2008 R2的测试环境,主要是明天要去给一客户重新搭建一套生产库的DG,其中发现一些问题,特此记录一下由于将要部署到生产环境,所以考虑在线搭建DG的方案,即不停库的情况下,而问题主要就是出在不停库时,用RAMN创建STANDBY的时候通常在线搭建D...

数据绑定(十)Binding的数据转换_weixin_33953384的博客-程序员宅基地

原文:数据绑定(十)Binding的数据转换 当Source端Path所关联的数据与Target端目标属性数据类型不一致时,需要添加数据转换器,数据转换器是一个自定义的类,这个类需要实现IValueConverter接口,这个接口有两个方法需要实现:Convert和Convert...

计算机网络实用技术教学资源,计算机网络实用技术第一章课件教学.ppt_weixin_39907133的博客-程序员宅基地

计算机网络实用技术第一章课件教学.ppt计算机网络实用技术 第1章 计算机网络概述 计算机网络技术是计算机技术与通信技术相结合的产物,随着计算机技术和通信技术的发展,计算机网络技术也在飞速的向前发展。如今,计算机网络已经成为信息存储、传播和共享的有力工具,成为信息交流的最佳平台。了解计算机网络知识,掌握计算机网络技术已经成为当代社会成员在网络化和数字化世界生存的基本条件,实...

推荐文章

热门文章

相关标签