背景
我要实现本文介绍的设计。
可以通过下图总结: 安全架构
客户端首先通过IDP进行身份验证(OpenID Connect / OAuth2)IDP返回访问令牌(不带用户信息的不透明令牌)客户端通过API网关使用Authorization标头中的访问令牌进行调用API网关使用访问令牌向IDP发出请求IDP验证访问令牌有效,并以JSON格式返回用户信息API网关将用户信息存储在JWT中,并使用私钥对其进行签名。然后,将JWT传递到下游服务,该服务使用公共密钥验证JWT如果服务必须调用另一个服务来满足请求,则它将传递JWT,该JWT充当请求的身份验证和授权我到目前为止有什么
我大部分使用以下方法完成:
Spring Cloud作为全球框架Spring Boot启动个人服务Netflix Zuul作为API网关我还编写了Zuul PRE过滤器,用于检查访问令牌,联系IDP并创建JWT。然后,将JWT添加到转发到下游服务的请求的标头中。
问题
现在,我的问题非常针对Zuul及其过滤器。如果由于任何原因在API网关中验证失败,如何在不继续过滤链和转发呼叫的情况下停止路由并直接使用401进行响应?
目前,如果身份验证失败,则过滤器不会将JWT添加到标头中,而401将来自下游服务。我希望我的网关可以阻止此不必要的呼叫。
我试图查看如何使用它com.netflix.zuul.context.RequestContext来完成此工作,但是文档却很贫乏,我找不到方法。