Oauth 如何使用RESTAPI调用获取Openshift会话令牌
作为自动化测试套件的一部分,我必须使用OpenShift的RESTAPI发送命令并获取OpenShift的状态。为了验证这些API调用,我需要在每个调用中嵌入一个授权令牌 目前,我通过在安装OpenShift的机器上使用ssh执行以下命令来获得此令牌:Oauth 如何使用RESTAPI调用获取Openshift会话令牌,oauth,openshift,Oauth,Openshift,作为自动化测试套件的一部分,我必须使用OpenShift的RESTAPI发送命令并获取OpenShift的状态。为了验证这些API调用,我需要在每个调用中嵌入一个授权令牌 目前,我通过在安装OpenShift的机器上使用ssh执行以下命令来获得此令牌: oc登录名--用户名=--密码= oc whoami——显示令牌 我想完全停止使用oc工具,并使用对API的HTTP调用来获取此令牌,但实际上无法找到解释如何使用它的文档。如果我在调用oc命令时使用选项--loglevel=10,我可以在登录
oc登录名--用户名=--密码=
oc whoami——显示令牌
我想完全停止使用oc工具,并使用对API的HTTP调用来获取此令牌,但实际上无法找到解释如何使用它的文档。如果我在调用oc命令时使用选项--loglevel=10
,我可以在登录时看到oc
发出的HTTP调用,但我很难从这些日志中反向工程流程
从理论上讲,这不是OpenShift特有的,而是OAuth协议特有的,我已经找到了一些类似于发布的文档,但是如果没有具体的示例,我仍然觉得很难实现
如果这有帮助的话,我正在使用ruby(而不是rails)开发这个工具
另外,我知道对于这种类型的工作,通常应该使用服务帐户令牌,但由于这是一个测试环境,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'
响应将是HTTP 302尝试重定向到另一个URL。重定向URL将包含令牌,例如:
Location: https://master.cluster.local:8443/oauth/token/display#access_token=VO4dAgNGLnX5MGYu_wXau8au2Rw0QAqnwq8AtrLkMfU&expires_in=86400&token_type=bearer
您可以使用令牌或用户/密码组合。 要在标题中使用username:password,可以使用authorization:Basic。oc客户机命令正在使用标头中的用户和密码执行简单身份验证。像这样
curl-H“授权:基本”
其中哈希正好是base64编码的用户名:密码。(使用echo-n“username:password”| base64进行尝试)
要使用令牌,您可以使用curl在此处获取令牌:
curl -H Authorization: Basic $(echo -n username:password | base64)" https://openshift.example.com:8443/oauth/authorize\?response_type\=token\&client_id\=openshift-challenging-client
但是令牌的回复格式很难看。你可以试试看
…|grep-oP“access_token=\K[ˆ&]*”
您的意思是我可以避免使用令牌,而只使用base64格式编码的用户名/密码?是的,您可以使用用户名/密码。但是,整个身份验证是基于令牌的。您还可以创建sa和secret,向sa添加admin角色,并使用其令牌对openshift进行身份验证。对于一些自动脚本,最好使用sa。感谢您的回答,但我不认为这与我发布的答案有什么不同,我使用用户名和密码获取令牌,然后将该令牌用于API调用。我在问题中还明确指出,我希望避免使用服务帐户。不幸的是,这些帐户都不适用于我。我可以使用“oclogin”命令登录,但这些curl命令失败,出现403错误。有人能帮我吗?我的集群版本是4.6。提前谢谢。