Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oauth 如何使用RESTAPI调用获取Openshift会话令牌_Oauth_Openshift - Fatal编程技术网

Oauth 如何使用RESTAPI调用获取Openshift会话令牌

Oauth 如何使用RESTAPI调用获取Openshift会话令牌,oauth,openshift,Oauth,Openshift,作为自动化测试套件的一部分,我必须使用OpenShift的RESTAPI发送命令并获取OpenShift的状态。为了验证这些API调用,我需要在每个调用中嵌入一个授权令牌 目前,我通过在安装OpenShift的机器上使用ssh执行以下命令来获得此令牌: oc登录名--用户名=--密码= oc whoami——显示令牌 我想完全停止使用oc工具,并使用对API的HTTP调用来获取此令牌,但实际上无法找到解释如何使用它的文档。如果我在调用oc命令时使用选项--loglevel=10,我可以在登录

作为自动化测试套件的一部分,我必须使用OpenShift的RESTAPI发送命令并获取OpenShift的状态。为了验证这些API调用,我需要在每个调用中嵌入一个授权令牌

目前,我通过在安装OpenShift的机器上使用ssh执行以下命令来获得此令牌:

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。提前谢谢。