0

我设法在一个 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 主机或另一台机器)并将一个识别为授权而另一个不识别?

4

1 回答 1

0

找到它:我必须通过 client-id:client-secret base64-encoded,然后它才能工作。

创建不记名令牌:

curl -H "Authorization: Basic c29tZS1jb25zdW1lcjpzb21lLXNlY3JldA==" -d "grant_type=client_credentials" http://snowflake:9000/oauth2/token

8SVvB9PTyvGU-td4-VH3BcRMquUFMWG_umFyzQaKAMo.vJfXfIUDzNmmcMqa4_HExREdcmU7iW4CqK9v_qN4Jdg

内省令牌:

curl -H "Authorization: Basic c29tZS1jb25zdW1lcjpzb21lLXNlY3JldA==" -d "token=8SVvB9PTyvGU-td4-VH3BcRMquUFMWG_umFyzQaKAMo.vJfXfIUDzNmmcMqa4_HExREdcmU7iW4CqK9v_qN4Jdg" http://snowflake:9001/oauth2/introspect

{"active":true,"client_id":"some-consumer","sub":"some-consumer","exp":1612965583,"iat":1612961983,"iss":"http://snowflake:9000/","token_type":"access_token"}

但我仍然想知道为什么介绍请求在没有 Authorization 标头的 docker 主机上工作。

于 2021-02-10T13:10:14.577 回答