微服务内部调用不认证用户

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务内部调用不认证用户相关的知识,希望对你有一定的参考价值。

参考技术A 微服务直接的访问调用就会抛出未授权的异常,,解决方案 服务直接调用时携带令牌

Feign 拦截器

添加依赖:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>1.4.4.RELEASE</version>
</dependency>
创建拦截器

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
public class FeignClientInterceptor implements RequestInterceptor
@Override
public void apply(RequestTemplate requestTemplate)
//拦截器
//使用RequestContextHolder工具获取request相关变量
try
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes != null)
// 取出request
HttpServletRequest request = attributes.getRequest();
// 取出所有请求头
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements())
String name = headerNames.nextElement(); // key
String value = request.getHeader(name); //value
if(name.equals("authorization")) //auoth2 认证请求头
//System.out.println("name="+name+"values="+values);
requestTemplate.header(name, value);



catch (Exception e)



使用feign

在 springboot 启动类中配置feign拦截器

// 配置feign拦截器
@Bean
public FeignClientInterceptor feignClientInterceptor()
return new FeignClientInterceptor();

然后就行了

ASP.NET Core 搭载 Envoy 实现微服务身份认证(JWT)

在构建以 gRPC 为核心的微服务架构的过程中,得益于 Envoy 对 gRPC 的“一等公民”支持,我们可以在过滤器中对gRPC服务进行转码,进而可以像调用 Web API 一样去调用一个 gRPC 服务。通常情况下, RPC 会作为微服务间内部通信的信使,例如,Dubbo、Thrift、gRPC、WCF 等等更多是应用在对内通信上。所以,一旦我们通过 Envoy 将这些 gRPC 服务暴露出来,其性质就会从对内通信变为对外通信。我们知道,对内和对外的接口,无论是安全性还是规范性,都有着相当大的区别。博主从前的公司,对内的 WCF 接口,长年处于一种"裸奔"的状态,属于没有授权、没有认证、没有文档的“三无产品”。那么,当一个 gRPC 服务通过 Envoy 暴露出来以后,我们如何保证接口的安全性呢?这就是今天这篇博客的主题,即 Envoy 作为网关如何提供身份认证功能,在这里,我们特指通过JWT,即 Json Web Token 来对接口调用方进行身份认证。

搭建 Keycloak

对于 JWT &#

以上是关于微服务内部调用不认证用户的主要内容,如果未能解决你的问题,请参考以下文章

利用Spring Cloud实现微服务- 内部调用

API网关和微服务认证

如何授权微服务内部通信?

微服务 六:服务网关

微服务架构中的认证授权设计

ASP.NET Core 搭载 Envoy 实现微服务身份认证(JWT)