通过oauth服务器通过带有Zool的spring网关授权请求

时间:2019-02-08 20:34:13

标签: spring spring-security oauth-2.0 netflix-zuul gateway

我的应用程序在具有(zuul)代理的(spring)网关后面具有微服务。也有内部(春季)oauth2授权服务器。我想为外部微服务调用实现client_credentials授予类型-用于M2M通信。

当我在网关application.yml中配置网关client_id和client_secret时,yml请求通过网关发出,但没有请求者检查-oauth授权网关本身,因此根本没有任何授权。我可以使用授权码授予类型,但是这将需要Web客户端授权,而(Web客户端)用户可能没有。

如果我从oauth微服务请求身份验证令牌,那么我将获得此应用程序的正确令牌。

如何强制网关使用请求者的client_id和client_secret从oauth获取令牌? -例如我可以通过标头提供它们作为基本授权。 还是可以将请求者从oauth获得的令牌提供给网关?

这个问题与另一个非常相似:Implementing authentication and authorization using Zuul Proxy, Oauth2 on REST Microservices 除了可能没有Web客户端,而是外部微服务。

1 个答案:

答案 0 :(得分:0)

我已经回答了问题Implementing authentication and authorization using Zuul Proxy, Oauth2 on REST Microservices

对我而言,最重要的是配置zuul代理以将授权标头转发到下游服务。最初,我虽然打算使用zuul过滤器,但是解决方案要简单得多-只需为zuul配置敏感标头即可:

server:
  port: 8080
zuul:
  sensitiveHeaders: Cookie,Set-Cookie # <--- this line
  routes:
    spring-security-oauth-resource:
      path: /spring-security-oauth-resource/**
      url: http://localhost:8081/spring-security-oauth-resource
    oauth:
      path: /oauth/**
      url: http://localhost:8083/spring-security-oauth-server/oauth

使用oauth成功验证客户端/用户的身份后,网关将把JWT令牌转发到下游。 当然,对于此网关,必须允许未经授权的访问oauth资源,并要求对所有其他资源进行身份验证。

有关主题的更多详细信息,请参见文章 https://www.baeldung.com/spring-security-zuul-oauth-jwt