Jenkins -请求中未包含有效的crumb

ehxuflar  于 2022-11-02  发布在  Jenkins
关注(0)|答案(3)|浏览(244)

Jenkins-2.263.1(LTS)通过tomcat部署在CentOS-8.2上,并在Jenkins前面运行Nginx reverse proxy
Manage JenkinsConfigure Systems-ApplySave不工作,由于这个错误,我不能Apply(或)Save我的任何配置,它总是在浏览器上显示以下错误(Firefox和Chrome).
HTTP状态403 -禁止
类型状态报告
消息请求中未包含有效的crumb
描述服务器理解请求,但拒绝授权。Apache Tomcat/9.0.30
同样JenkinsManage JenkinsConfigure Global Security-Apply工作。但是Save不工作,这也会导致上面给出的错误。
Systems log错误消息。
二月19,2021 10:56:05 AM警告哈德逊.security.csrf.CrumbFilter doFilter ankit. sahu对/jenkins/configSubmit的请求中没有包含有效的crumb。返回403。

尝试的解决方法:-

1) Under Configure Global security > CSRF Protection > Enable proxy compatibility( Tick marked Enabled). - Didn't work so disabled with below command.
2) hudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION = true - Even this didn't solve the problem.
3) Installed the Strict Crumb Issuer plugin.
   Enabled this plugin and unchecked Check the session ID from its configuration (Under Jenkins Configure Global Security).
4) Restated the Jenkins.

甚至尝试在/apache-tomcat-9.0.30/conf/tomcat-users.xml文件中添加以下内容。

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
    <role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <role rolename="manager-jmx"/>
    <role rolename="manager-status"/>
    <role rolename="admin-gui"/>
    <role rolename="admin-script"/>
    <user username="user" password="password" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>
</tomcat-users>

但是仍然遇到同样的问题。我不知道如何解决它,有人能帮助我吗?

zbwhf8kr

zbwhf8kr1#

您可以使用下面的groovy脚本(暂时)禁用CSRF。转到Manage Jenkins >> Script Console,然后执行下面的groovy脚本。

import jenkins.model.Jenkins

def instance = Jenkins.instance
instance.setCrumbIssuer(null)
ccgok5k5

ccgok5k52#

嵌入到Jenkins的Web输出中的随机数是基于(至少我已经读到的一部分)来自请求客户端的值的。除了确保您的反向代理被正确配置为传递X-Forwarded-For和X-Forwarded-Proto之外,还要确保Tomcat阀在servlet请求API中公开这些头值,以便Jenkins可以访问它们。
将以下内容添加到$CATALINA_BASE/conf/server.xml中,从属于<Host>元素:

<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="x-forwarded-for" protocolHeader="x-forwarded-proto" />

参考:https://www.jenkins.io/doc/book/system-administration/reverse-proxy-configuration-troubleshooting/
参考:https://www.jenkins.io/doc/book/system-administration/reverse-proxy-configuration-with-jenkins/
请参阅https://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Remote_IP_Valve

au9on6nz

au9on6nz3#

如果您使用的是jenkinsapi,我通过在构造函数中指定useCrumb=True解决了这个错误:

j = Jenkins(base_url, username=username, password=password, useCrumb=True)

相关问题