我需要使用 python 代码访问 Jenkins REST API。需要一些有关正确方法的指导。
我在 apache tomcat 中托管了 jenkins v2.176.1,并启用了 SSL。
我已根据以下内容配置了 Azure AD 身份验证this https://wiki.jenkins.io/display/JENKINS/Azure+AD+Plugin。
我可以在浏览器中使用我的 Azure AD 凭据登录并访问 jenkins 的 REST API。
当我尝试根据示例从curl或postman访问REST API时here https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-implicit-grant-flow我能够获得访问令牌,但詹金斯休息API(与Authorization: Bearer [access_token]
在标头中)响应显示为未经授权。
配置的 API 权限为:在 Azure Active Directory 图表下, Group.Read.All 和 User.Read.All 。
我可以从邮递员访问 REST API 的唯一方法是:
Step 1:在带有 oauth2 选项的邮递员授权选项卡中 --> 获取新的访问令牌 --> grant_type as"Authorization Code"
。响应包含access_token、refresh_token和id_token
.
这会在邮递员中设置与微软登录相关的cookie。
Step 2:执行 GET 请求https://[jenkinsHost]/securityRealm/commenceLogin
使用参数“id_token:id_token”(从上一步获得)
它返回一个 HTML 响应(200):
<html>
<head>
<title>Working...</title>
</head>
<body>
<form method="POST" name="hiddenform" action="https://[jenkins_host]/jenkins/securityRealm/finishLogin">
<input type="hidden" name="id_token" value="eyJ0eXAiOiJKV1Qi....." />
<input type="hidden" name="session_state" value="1b151d4a-3318-49b5-a653-18260501ba6a" />
<noscript>
<p>Script is disabled. Click Submit to continue.</p>
<input type="submit" value="Submit" />
</noscript>
</form>
<script language="javascript">document.forms[0].submit();</script>
</body>
</html>
这将詹金斯饼干设置为JSESSIONID
.
Step 3: POST 请求至 :https://[jenkins_host]/jenkins/securityRealm/finishLogin
与参数id_token
其值可从之前的响应中获得。(跳过此步骤会从 REST API 返回 403 响应,即使 cookie 是在步骤 2 中设置的)
Step 4:向 Jenkins REST API 发出 GET 请求,无需任何其他参数/标头即可正常工作。
有人可以指导我访问 REST API 的正确流程,或者我正在做的(使用 cookie)是否是正确的方法?