调试资源服务器和授权服务器之间的接口(oauth 2.0.验证访问令牌)

Debugging The interface between Resource Server and Authorization Server (oauth 2.0. validation access token)

有两个 spring-boot 个应用程序。

  1. client
  2. resource-sever 有一个 dev okta 帐户用作 auth server

(这 2 个应用程序是标准的 Spring Boot 客户端 -> resource-server,几乎是开箱即用的 okta 设置,应该没有问题)

client - 安全地将消息发送到--> secure-sever(在 header 中传递访问令牌以证明它有权调用它并取回数据)

(按预期工作)

但我想弄清楚他们之间发生了什么,交通方面

我试图找出 resource-server 检查从 client 获得的 token 和从 auth server 获得的 token 的那一刻。

这是标准的序列图oauth 2.0 flow和我要调试的部分(箭头)

auth server

clientresource-sever:

之间有通信

我似乎无法确认资源服务器(从右边)使用 auth-server (okta) 进行任何 令牌验证 ..?

问题:是为什么?根据我的理解,它应该(以某种方式)验证它。

我期待看到从 resource-server 到 auth-server (otka) 的 token-validation-request 调用(2015 年 10 月的 ETF RFC 7662),如下所示:

How to validate an OAuth 2.0 access token for a resource server?

我原以为,对于每个客户端调用,资源服务器都会检查客户端传递的令牌是否有效。然而,我没有看到任何从资源服务到 okta 的调用会在其对 okta 的请求中使用令牌。

这归结为 JWT 和不透明令牌之间的区别。

根据我看到的对 /keys 的调用,您的应用程序似乎正在使用 JWT。

当使用 JWT 身份验证时,资源服务器将在启动时查询 jwks_url(在本例中为 /keys)以检索可用于验证的一组 public 密钥JWT-encoded 不记名令牌。

然后,当资源服务器在来自客户端的请求中收到承载令牌时,它将根据从 jwks_url 端点获得的 public 密钥验证其签名。

这意味着资源服务器不必在每次请求时都查询授权服务器。
您可以在 Spring 安全参考文档的 OAuth 2.0 Resource Server JWT 部分阅读有关此过程的更多信息。

您链接到的问题涉及不透明标记。
在此设置中,资源服务器每次都必须调用授权服务器 introspection 端点来验证令牌。 您可以在 Spring 安全参考文档的 OAuth 2.0 Resource Server Opaque Token 部分阅读有关此过程的更多信息。