0

我已经阅读了一堆关于此的问题,但没有一个与我的边缘案例相似,我已经有了我的JWT。春云Zuul通过JWT下游

我在我的前端使用Auth0(注意auth-zero,而不是Oauth)来获得一个JWT,它为我的后端加载了作用域和身份验证。当我登录到我的前端客户端时,我得到一个带有access_token的JWT。如果我复制令牌我可以做一个直接的卷曲请求我的后端微服务

curl -X GET -H "Authorization: Bearer TOKEN_HERE" -H "Cache-Control: no-cache" "http://192.168.0.109:39885" 

这正常工作,我得到一个200响应。尼斯。

现在,当我通过我的Zuul代理尝试同样的卷曲的请求,我得到一个讨厌401

的配置我有我的网关是:

@EnableHystrix 
@EnableZuulProxy 
@EnableEurekaClient 
@SpringBootApplication 
public class EdgeServiceApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(EdgeServiceApplication.class, args); 
    } 
} 

现在从阅读documentationthis谈话辉煌的Syer博士我知道我需要允许标题下游,我已经做了:

zuul: 
    sensitiveHeaders: 
    routes: 
    instances: 
     path: /instances/** 
     serviceId: instance-service 
    restore: 
     path: /restore/** 
     serviceId: restore-service 

设置sensitiveHeaders空应该允许一切(用于测试当然)。

进一步看看文档,我看到我需要将@EnableOAuth2Sso添加到我的Zuul配置中。这是我弄糊涂/东西破裂的地方。

据我所知,@EnableOAuth2Sso是用于生成和验证令牌。我不想这样做。我已经准备好了我的微型服务(在那里验证它)。

我该如何告诉Zuul不要惹我的智威汤逊,并将他们一起发送?

+0

你可以尝试这个属性? proxy.auth.routes。 oauth2 – MohamedSanaulla

+0

没有运气我很害怕。然而,一个奇怪的事情开始发生时,我补充说,我的令牌在前端被删除,我正在注销... –

回答

1

我已经解决了这个,有很多事情错我的代码细节,但这个问题的要点是:

  • 我试图将整个JWT发送到微服务时,我应该有刚刚被发送access_token
  • 当我试图发送access_token,余烬,简单auth0真正发送id_token默认
  • 我需要配置Zuul直传球CORS请求到微服务

一旦我开始发送access_token而不是id_token,很容易开始调试问题。

告诉烬,简单auth0使用access_token,而不是添加一个新的授权有以下:

// app/authorizers/application.js  
import Ember from 'ember'; 
    import BaseAuthorizer from 'ember-simple-auth/authorizers/base'; 
    const { 
     isPresent, 
     debug 
    } = Ember; 

    export default BaseAuthorizer.extend({ 
     authorize(sessionData, block) { 
     let userToken = sessionData['accessToken']; 

     if (isPresent(userToken)) { 
      block('Authorization', `Bearer ${userToken}`); 
     } else { 
      debug('Could not find the authorization token in the session data for the jwt authorizer.'); 
     } 
     } 
    }); 

然后记得告诉你的适配器来使用新的授权:

export default DS.JSONAPIAdapter.extend(DataAdapterMixin, { 
    authorizer: 'authorizer:application', 
}); 

将CORS转发到您的微服务使用:

spring: 
    mvc: 
    dispatch-options-request: true 

和maki确保你没有从请求中删除标题:

zuul: 
    sensitiveHeaders: 
    routes: 
    instances: 
     path: /instances/** 
     serviceId: instance-service 
     stripPrefix: false 

    restore: 
     path: /restore/** 
     serviceId: restore-service 
     stripPrefix: false 

希望有人认为这有用。

+0

感谢您分享您的发现和解决方案。 – MohamedSanaulla