春云Zuul通过JWT下游
我已经阅读了一堆关于此的问题,但没有一个与我的边缘案例相似,我已经有了我的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);
}
}
现在从阅读documentation和this谈话辉煌的Syer博士我知道我需要允许标题下游,我已经做了:
zuul:
sensitiveHeaders:
routes:
instances:
path: /instances/**
serviceId: instance-service
restore:
path: /restore/**
serviceId: restore-service
设置sensitiveHeaders
空应该允许一切(用于测试当然)。
进一步看看文档,我看到我需要将@EnableOAuth2Sso
添加到我的Zuul配置中。这是我弄糊涂/东西破裂的地方。
据我所知,@EnableOAuth2Sso
是用于生成和验证令牌。我不想这样做。我已经准备好了我的微型服务(在那里验证它)。
我该如何告诉Zuul不要惹我的智威汤逊,并将他们一起发送?
我已经解决了这个,有很多事情错我的代码细节,但这个问题的要点是:
- 我试图将整个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
希望有人认为这有用。
感谢您分享您的发现和解决方案。 – MohamedSanaulla
你可以尝试这个属性? proxy.auth.routes。 oauth2 –
MohamedSanaulla
没有运气我很害怕。然而,一个奇怪的事情开始发生时,我补充说,我的令牌在前端被删除,我正在注销... –