【问题标题】:How do I wire up spring oauth using spring eureka?如何使用 spring eureka 连接 spring oauth?
【发布时间】:2016-05-02 20:25:48
【问题描述】:

我使用 Spring 教程创建了一个单页应用程序,用于使用 AngularJS 和 OAuth 制作一个,可以在此处找到: https://spring.io/guides/tutorials/spring-security-and-angular-js/#_multiple_ui_applications_and_a_gateway_single_page_application_with_spring_and_angular_js_part_vi

这是 SPA 应用程序的 application.yml 文件:

security:
  user:
    password: none
  oauth2:
    client:
      accessTokenUri: localhost:7777/uaa/oauth/token
      userAuthorizationUri: localhost:7777/uaa/oauth/authorize
      clientId: acme
      clientSecret: acmesecret
    resource:
      user-info-uri: localhost:7777/uaa/user


zuul:
  routes:
    resource:
      path: /resource/**
      url: localhost:9000/resource
    user:
      path: /user/**
      url: localhost:7777/uaa/user

eureka:
  client:
    serviceUrl:
      defaultZone: ${vcap.services.eureka-service.credentials.uri:127.0.0.1:8761}/eureka/

---
spring:
  profiles: cloud
eureka:
  instance:
    hostname: ${APPLICATION_DOMAIN}
    nonSecurePort: 80

我想知道如何更改 zuul 路由和 user-info-uri,这样我就不必指定 url,所有这些都可以通过使用 service-id 来完成。我在这里查看了使用 eureka 的教程:

https://spring.io/blog/2015/01/20/microservice-registration-and-discovery-with-spring-cloud-and-netflix-s-eureka

但我不太明白如何在不将所有 java 添加到我的代码的情况下实现我的目标,因为基本的 eureka 服务器似乎已经注册了我的所有服务。

【问题讨论】:

    标签: spring-boot spring-cloud netflix-eureka spring-oauth2


    【解决方案1】:

    使用 eureka 服务 id 时遇到问题,userInfoUri 过去一直抛出 UnknownHost 异常,@LoadBallanced restTemplate 没有解决我的问题,解决方案是将 prefer-token-info 设置为 false(如果为 true - oauth 没有负载平衡)

    security.oauth2.resource.service-id={Service ID as at eureka server registered}
    security.oauth2.resource.userInfoUri= http://${security.oauth2.resource.service-id}/user/me
    security.oauth2.resource.loadBalanced=true
    security.oauth2.resource.prefer-token-info=false
    

    如果使用服务 ID 则不需要端口号,但如果使用 ip 或主机则需要

    【讨论】:

      【解决方案2】:

      如果我理解你的问题是正确的,你可以使用这种模式的配置文件:

      zuul:
        routes:
          <service_id>:
            path: /path/**
      

      例如(如果您的 oauth-service 注册为 auth):

      zuul:
        routes:
          auth:
            path: /user/**
      

      Zuul 将利用 Eureka 并找到服务的端点。除此之外,它还将提供客户端负载平衡。

      【讨论】:

      • 这适用于 zuul 端点,但 oauth2.* 属性仍需要指向物理 URL。
      • Zuul-API 网关中是否需要 oauth2 属性?
      • 如果它需要通过 OAuth2 进行身份验证,显然。否则,一般来说不会。
      • 一般来说是的。我的意思是,如果您从任何提供商(例如您自己的 Zuul 背后的 OAuth2 服务器)获得令牌,您将使用它来针对后端服务进行身份验证。因此,您不需要在 Zuul 中进行任何身份验证。我在这里错过了什么吗?
      • 我不这么认为。架构(拓扑)是灵活的。我发现将身份验证置于边缘(即 Zuul)很有用,但我相信您可以设计不这样做的系统。
      猜你喜欢
      • 2016-11-13
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 2022-08-06
      • 2019-03-15
      • 2018-08-13
      • 2017-11-16
      相关资源
      最近更新 更多