Spring Cloud:Eureka,Zuul和OAuth2 - 扩展授权服务器

    我们将在这里讨论一个非常实际的问题,扩展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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值