0

RESTClientからIBM Rational Quality Managerにログインしようとしているときに間違っていることを理解できません。誰かが私を助けるのにこの質問を非常に簡単に見つけることができるかもしれませんが、私はそれを昨日見つけて約2日間この問題を解決することはできません。私はcurl.exeユーティリティを使用している場合 すべてが完璧に動作します:フォームベースの自動化によるIBM Rational Quality Managerサーバーアプリケーションへのログイン

set COOKIES=cookies.txt 
set USER=jts 
set PASSWORD=jts 
set HOST="https://jazz.server.com:9443/qm" 
curl -k -c %COOKIES% "%HOST%/authenticated/identity" 
curl -k -L -b %COOKIES% -c %COOKIES% -d j_username=%USER% -d j_password=%PASSWORD% "%HOST%/authenticated/j_security_check" 

あなたは、私がJSESSIONIDパラメータとの良好な結果は、クッキーと一緒に返されていることがわかります。

# Netscape HTTP Cookie File 
# https://curl.haxx.se/docs/http-cookies.html 
# This file was generated by libcurl! Edit at your own risk. 

#HttpOnly_jazz.server.com FALSE / TRUE 0 LtpaToken2 0VkNWt7dIquUiEJJ4XlPqEgsIKW/PJD2x4ckihZTCC6Iofo+KGtXYUuWhwk8wLnQZCxA0SP9/lgkWte/sH3/3k1HFFbM7UX07pFbh/MxVBcGtzY9Yr2YC6T3jZClxVDOU2R6fQk1SAu8/6Mia9LgrBnqsvauldoChU0ZFEDhI/ogHbyUKsOhM8gZNx8kJrkUCj0NPOci07UjKgILCorDZoiw5uYAIyC07ZBS6CY3juxkwgkYXwRCbyhpZY6dEeQg+CE97OwFhQCO7KesrflVF6xGRmEiz7f5DDG7oscqM72HJ9SF4zSMgKBko38l60ba 
#HttpOnly_jazz.server.com FALSE / TRUE 0 JSESSIONID 0000bzfBh88AbZ6yGgn-IVAccGA:34261533-f9f3-43a1-a58d-95e3dfca7322 
#HttpOnly_jazz.server.com FALSE /qm/authenticated/ TRUE 0 X-com-ibm-team-foundation-auth-loop-avoidance false 

をしかし、私はRESTClientを使用している場合、私は最初のGETリクエスト:

Method:  GET<br> 
URI:  https://jazz.server.com:9443/qm/authenticated/identity 

返されるヘッダは以下のとおりです。

Status Code: 200 OK 
Cache-Control: no-cache="set-cookie, set-cookie2" 
Content-Encoding: gzip 
Content-Language: en-US 
Content-Length: 1028 
Content-Type: text/html; charset=UTF-8 
Date: Mon, 18 Sep 2017 17:33:06 GMT 
Expires: Thu, 01 Dec 1994 16:00:00 GMT 
Set-Cookie: JazzFormAuth=Form; Path=/qm; Secure 
X-Powered-By: Servlet/3.0 
X-com-ibm-team-repository-web-auth-msg: authrequired 

次はI二POSTリクエストです:

Method:  POST<br> 
URI:  https://jazz.server.com:9443/qm/authenticated/j_security_check?j_username=jts&j_password=jts 

が返されるヘッダは以下のとおりです。

Status Code: 400 Bad Request 
Connection: Close 
Content-Language: en-US 
Content-Length: 757 
Content-Type: text/html;UTF-8 
Date: Mon, 18 Sep 2017 18:35:02 GMT 
X-Powered-By: Servlet/3.0 

誰かが違いはここにあるものを私に教えてください。それはなぜ機能しないのですか? 事前にご協力いただきありがとうございます!私は今や本当に止まっている!

答えて

0

私はあなたと同じ問題を経験しました。悲しいことに、クッキーストアを設定するだけでは十分ではありません。手動でjsession値を抽出し、それをクロスサイトリクエスト偽造ヘッダーとして送信する必要があります。私はこれを正確に行うpowershellスクリプトの抜粋を投稿します。これは、他のスクリプト作成環境やプログラミング環境にはわかりやすいものでなければなりません。 X-ジャズ-CSRF-防止ヘッダがJSESSION IDに設定されている最後の行、第2

# fetch required cookies with a "failed" attempt at reaching a location 
# that requires auth 
./curl.exe -v -k -L ` 
    --cookie $cookies ` 
    --cookie-jar $cookies ` 
    "${server}authenticated/identity" 

# now that we have the cookies, we can send our login information with proper 
# cookies and credentials 
./curl.exe -v -k -L ` 
    --cookie $cookies ` 
    --cookie-jar $cookies ` 
    --data j_username=$username ` 
    --data j_password=$password ` 
    "${server}j_security_check" 

# get the cookie value that we need to pass as a special header 
$pattern = "JSESSIONID\s+([^\s]+)" 
$cookieValue = Select-String -Path $cookies -Pattern $pattern | 
    %{ $_.matches } | 
    %{ $_.groups[1].value } | 
    Select-Object -Unique 

# we now have the cookies and also the jsessionid that we need. 
./curl.exe -v -k -L ` 
    --cookie $cookies ` 
    --cookie-jar $cookies ` 
    --header X-Jazz-CSRF-Prevent:$cookieValue ` 
    -- other stuff to complete the call. 

注意:私は3つの必須のステップにラインを低減しました。これは、通常のコマンドライン環境とブラウザのやりとりを真似しようとすると失われる重要なビットです。

関連する問題