Var*_*tha 5 tomcat azure oauth-2.0 jenkins azure-active-directory
我需要使用 python 代码访问 Jenkins REST API。需要一些有关正确方法的指导。
我在启用 SSL 的 apache tomcat 中托管了 jenkins v2.176.1。我已经基于此配置了 Azure AD 身份验证。我可以在浏览器中使用我的 Azure AD 凭据登录并访问 jenkins 的 REST API。
当我尝试根据此处的示例从 curl 或邮递员访问 REST API 时,我能够获取访问令牌,但 jenkins rest api(Authorization: Bearer [access_token]在标头中)响应显示为未经授权。
配置的 API 权限是:在 Azure 活动目录图下, Group.Read.All 和 User.Read.All 。
我可以从邮递员访问 REST API 的唯一方法是:
步骤 1:在带有 oauth2 选项的邮递员授权选项卡中 --> 获取新的访问令牌 --> grant_type as "Authorization Code"。响应包含 access_token、refresh_token 和id_token。
这将在邮递员中设置与微软登录相关的 cookie。
第 2 步:https://[jenkinsHost]/securityRealm/commenceLogin使用参数“id_token:id_token”(从上一步获得)执行 GET 请求,
它返回一个 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>
Run Code Online (Sandbox Code Playgroud)
这将 jenkins cookie 设置为JSESSIONID.
第 3 步:POST 请求到:https://[jenkins_host]/jenkins/securityRealm/finishLogin使用id_token其值可从上一个响应中获得的参数。(跳过此步骤会从 REST API 返回 403 响应,即使 cookie 是从第 2
步中设置的)第 4 步:GET 请求到 Jenkins REST API 没有任何其他参数/标题工作正常。
有人可以用正确的流程指导我访问 REST API,或者我在做什么(使用 cookie)是正确的方法吗?
| 归档时间: |
|
| 查看次数: |
614 次 |
| 最近记录: |