我的应用程序在具有(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客户端,而是外部微服务。
答案 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