作为自动化测试套件的一部分,我必须使用 OpenShift 的 REST API 来发送命令并获取 OpenShift 的状态。为了验证这些 API 调用,我需要在每次调用中嵌入一个授权令牌。
目前,我通过在安装了 OpenShift 的机器上使用 ssh 执行以下命令来获取此令牌:
oc login --username=<uname> --password=<password>
oc whoami --show-token
我想完全停止使用oc工具并使用对 API 的 HTTP 调用获取此令牌,但我真的无法找到解释如何使用它的文档。如果我--loglevel=10在调用 oc 命令时使用该选项,我可以看到oc登录时进行的 HTTP 调用,但是我很难从这些日志中对进程进行逆向工程。
从理论上讲,这不是 OpenShift 特有的内容,而是 OAuth 协议特有的内容,我找到了一些文档,例如此处发布的文档,但我仍然发现没有具体示例很难实现。
如果这有帮助,我正在使用 ruby(而不是 rails)开发这个工具。
PS 我知道通常对于这种类型的工作,应该使用服务帐户令牌,但由于这是一个测试环境,因此 OpenShift 安装经常被删除和重新安装。这将迫使我每次使用 oc 命令行工具重新创建服务帐户,并再次阻止我自动化该过程。
我在这个GitHub 问题中找到了答案。
令人惊讶的是,一个 curl 命令就足以获取令牌:
curl -u joe:password -kv -H "X-CSRF-Token: xxx" 'https://master.cluster.local:8443/oauth/authorize?client_id=openshift-challenging-client&response_type=token'
Run Code Online (Sandbox Code Playgroud)
响应将是尝试重定向到另一个 URL 的 HTTP 302。重定向 URL 将包含令牌,例如:
Location: https://master.cluster.local:8443/oauth/token/display#access_token=VO4dAgNGLnX5MGYu_wXau8au2Rw0QAqnwq8AtrLkMfU&expires_in=86400&token_type=bearer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12336 次 |
| 最近记录: |