具有 Azure 活动目录身份验证的 Jenkins:REST API 访问不适用于不记名令牌

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)是正确的方法吗?