2017-04-10 36 views
1

JenkinsでAPIジョブを使用して作成したいが、JenkinsのCSRF保護のための接続ができない。私はクラムを持っていますが、JSONまたはJavaScriptのurl/requestにPOSTメソッドでデータを渡す方法を教えてください。何か案は? JAVAを使わずにJSだけで作ろうと思っています。ありがとうJSON/JS経由でJenkinsのCSRFにcrumbを追加する方法

答えて

1

十分に簡単であるはずです。 JenkinsでCSRFを成功させるためには、あなたが期待していることはほとんどありません。

#1

有効で、実際のCSRFクラムを取得し、そのためにあなたが "/crumbIssuer" エンドポイントを使用する必要があります。 AFAIKの場合、これは保護されたエンドポイントであるため、要求内のAPIトークンまたは資格情報を使用して認証された呼び出しを行う必要があります。ここで私はJavaScriptでそれをどのように行うのでしょう:

// **** - is a placeholder for an auth token, replace it with yours 
$.get({ 
    url: "https://my.jenkins.io/crumbIssuer/api/json", 
    contentType: "application/json", 
    headers: { 
     "User-Agent": "my_js_script", 
     "Authorization": "****" 
    } 
}).done(function(data) { 
    // this is how you fetch valid & actual CSRF crumb 
    console.log(data.crumbRequestField + " = " + data.crumb); 
}); 

#2

さて、あなたは有効な&実際CSRFクラムのハンドルを持っているので、状態を変更するすべての要求でそれを送信しますジェンキンスで貸し付けは、あなたの有効なCSRFクラムJSONは次のようなものになります。

{ "crumbRequestField": "Jenkins-Crumb", "crumb": "noop" } 

を、したがって、あなたのAjaxの呼び出しは、多少、この(余分な「ジェンキンス・クラム」HTTPヘッダーに注意してください)のようになります。

// **** - is a placeholder for an auth token, replace it with yours 
// simply activates a job in Jenkins, requirement for cloned jobs (aka. "Create-A-Copy-From") 
$.post({ 
    url: "https://my.jenkins.io/job/my_job/description", 
    contentType: "application/x-www-form-urlencoded; charset=UTF-8", 
    headers: { 
     "User-Agent": "my_js_script", 
     "Authorization": "****", 
     "Jenkins-Crumb": "noop" // makes CSRF filter in Jenkins happy 
    }, 
    data: "description=" 
}); 

これらのJavaScriptスニペットは完璧ではありませんが、うまくいけば正しい方向を示します。

私はJenkins APIライブラリですが、Rubyのプロジェクトで作業しています。 ;

  • jenkins-api/lib/jenkins/job.rb(参照

    • jenkins-api/lib/jenkins/connection.rb(「クラム方法を参照):ここではあなたが実際にあなたが探しているものありませんいくつかのソースコードを読むために必要がある場合に興味があるかもしれないファイルをいくつか紹介します"activate_job"メソッド);
  • +0

    認証トークンの生成方法は? –

    関連する問題