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