我的应用程序在带有zuul代理的(spring)网关后面有微服务。还有内部(spring) oauth2授权服务器。我希望为来自外部的微服务调用实现client_credentials授权类型-用于M2M通信。
当我在网关的application.yml中配置client_id和client_secret时,请求通过网关,但没有请求者检查- oauth授权网关本身,因此根本没有授权。我可以使用授权码授权类型,但它需要(web客户端)用户可能没有的web客户端授权。
如果我从oauth微服务请求身份验证令牌,我将获得此应用程序的正确令牌。
如何强制网关使用请求者的client_id和client_secret从oauth获取令牌?-例如,我可以通过header提供它们作为基本授权。或者,我可以向网关提供请求者从oauth获得的令牌吗?
这个问题与另一个问题非常相似:Implementing authentication and authorization using Zuul Proxy, Oauth2 on REST Microservices,除了可能没有web客户端,而是一个外部微服务。
发布于 2019-03-21 20:44:22
我已经回答了问题Implementing authentication and authorization using Zuul Proxy, Oauth2 on REST Microservices。
在我的例子中,最重要的事情是配置zuul代理来将authorization头转发到下游服务。最初我考虑使用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
https://stackoverflow.com/questions/54599803
复制相似问题