我设法在一个 docker 容器中设置了 ORY Hydra,第一次测试表明它工作正常。特别是,我可以为客户端颁发访问令牌,然后使用 hydra 命令行界面自省该令牌。我什至可以使用来自 docker 主机上的 shell 的简单 HTTP 请求来内省令牌,例如:
curl -X POST -d 'token=Gatyew_trJ8rHo0OEqPU6D6a5-Zwma79ak7KffqT7rA.U7F43t5o0ax_qdj9EBFS8ulR2R1GaCzkaiFPAIE-5d4' http://127.0.0.1:9001/oauth2/introspect
我使用自省端点的已发布端口。
现在,当涉及到使用来自不同机器的相同 curl 调用自省令牌时,例如
curl -X POST -d 'token=Gatyew_trJ8rHo0OEqPU6D6a5-Zwma79ak7KffqT7rA.U7F43t5o0ax_qdj9EBFS8ulR2R1GaCzkaiFPAIE-5d4' http://snowflake:9001/oauth2/introspect
由于缺少授权,内省被拒绝。这也显示在 hydra 日志中。请注意,即使在未经授权的情况下,从 docker 主机本身的 shell 发出相同的调用也会起作用。但是从另一台机器调用,调用被拒绝,即使我使用(testwise)基本身份验证,比如
curl -X POST -H "Authorization: Basic some-consumer:some-secret" -d 'token=Gatyew_trJ8rHo0OEqPU6D6a5-Zwma79ak7KffqT7rA.U7F43t5o0ax_qdj9EBFS8ulR2R1GaCzkaiFPAIE-5d4' http://snowflake:9001/oauth2/introspect
(请注意,hydra 服务器默认配置为仅用于基本身份验证)。
我需要做什么才能被授权通过来自不同机器的调用来内省令牌?以及为什么 hydra 可以区分两个相同的调用(来自 docker 主机或另一台机器)并将一个识别为授权而另一个不识别?