0

わかりました、ここで技術的な質問があります。VersionOne の「ストーリー」(XStudio の「要件」) と「欠陥」(XStudio の「バグ」) を選択できるように、XStudio で統合コンポーネントを開発しました。このようにして、XStudio からテストを実行し、結果やメトリックなどを管理できるだけでなく、VersionOne のアイテムを使用して XStudio で完全なトレーサビリティ マトリックス (製品 -> 要件 -> テスト -> テスト キャンペーン -> バグ) を管理することもできます。リンクは当方で処理します。

これを行うために、VersionOne の REST API を使用してコネクタを実装しました。すべてがうまく機能します!非常に速いなど

VersionOne の無料サーバーを使用してテストしましたが、問題はありませんでした。私たちの Java コードは、「基本認証」プロトコルを使用して認証するように Cookie を管理します。VersionOne から Cookie を取得し、それをローカルの CookieStore に保存して、次のリクエストでその Cookie を提供するので、何度も認証する必要はありません。これはすべて、私たちの側からはうまくいきました。

The content looks like this:
{X-Instart-Request-ID=[7405870175418545839:SEN01-NPPRY09:1396448658:44], 
null=[HTTP/1.1 200 OK], 
Date=[Wed, 02 Apr 2014 14:24:17 GMT], 
Content-Length=[16063], 
Expires=[-1], 
VersionOne=[Ultimate/14.0.7.6706; Scrum], 
Set-Cookie=[.V1.Ticket.ncnuaaa=HFZlcnNpb25PbmUuV2ViLkF1dGhlbnRpY2F0b3LqgwAAB1hTdHVkaW+CjqLWdBzRCP8/N/R1KMorEByFu31RuGY+eqVCi1FHvTE=; path=/; HttpOnly], 
Connection=[keep-alive], 
Content-Type=[text/xml; charset=utf-8], 
Server=[Microsoft-IIS/8.0], 
Pragma=[no-cache], 
Cache-Control=[no-cache]}

しかし... クライアントの環境でコードを実行すると、何らかの理由で元の Cookie を取得できません!?

{cache-control=[no-cache], 
content-type=[text/xml; charset=utf-8], 
null=[HTTP/1.1 200 OK], expires=[-1], 
content-length=[16063], 
server=[Microsoft-IIS/8.0], 
date=[Wed, 02 Apr 2014 12:34:08 GMT], 
pragma=[no-cache]}

コードが接続からヘッダー フィールドを取得し、「Set-Cookie」フィールドを取得しようとすると、それが見つからず、ポップアップが自動的に表示されます。

Map<String, List<String>> headerFields = connection.getHeaderFields();
List<String> cookiesHeader = headerFields.get("Set-Cookie");

ポップアップは認証を求めています (ちなみに、「www6.v1host.com/192.33.31.50」では「www6.v1host.com/abcded」が予想されていましたが、ここに手がかりがあるのではないでしょうか?)。

ここでサーバーで認証すると、すべてが正常に続行され、すべてが正常に機能します。ただし、以前に接続で行ったように、再度認証する必要はありません。

String plainAuth = username + ":" + password;
encodedAuth = ("Basic " + new String(Base64.encode(plainAuth.getBytes()))).replaceAll("\n", "");
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", encodedAuth);
connection.setRequestProperty("Connection", "keep-alive");

したがって、これが認証が機能していないためか (Cookie が返されず、ポップアップがユーザーに明示的に認証するように求める理由を説明します)、または Cookie 管理に関して特定の何かがあるためかどうかはわかりません...

ここで何が起こっているのか分かりますか?

このコードは、Basic Auth を使用する他の多くの REST API でうまく機能しています。そしてクッキー。前もって感謝します、

4

1 に答える 1

0

XStudioの開発者であるXQualで働いているようですね。もしそうなら、私に連絡してください。別の統合をいつでも喜んでリストアップします。

これが複数の顧客に対して機能することを意図していると仮定すると、いくつかのアドバイスがあります。

  • 意味のあるユーザー エージェント ヘッダーを提供します。これにより、統合を積極的に進めることができます。ヘッダーは、カスタムの 1 回限りの製品にも役立ちますが、他のベンダーが関与している場合はさらに重要になります。
  • 認証にはOAuth2を使用します。Java には OAuth2 用の優れたライブラリがたくさんあります。Apache Oltuを使用してそれを行う方法を紹介するブログ記事を近日公開予定です。

あなたの特定の質問に対して、私はいくつかの予感があります:

  • VersionOne のデプロイ方法については、期待しすぎているかもしれません。VersionOne は、オンプレミスとオンデマンドの両方で提供されます。顧客は、オンプレミスを表すために「192.33.31.50」を設定に入れている可能性がありますが、あなたはオンデマンドのインスタンス名を期待しています。また、すべてのオンデマンド インスタンスが「www6」にあるわけではないことに注意してください。
  • オンプレミスの場合、VersionOne は Windows 統合認証のインストール オプションも提供します。その場合、期待していたヘッダーを取得できない可能性があります。これが、上記で OAuth2 を推奨した理由の 1 つです。OAuth2 は、ユーザー認証メカニズムに関係なく、常に API 呼び出しで使用できます。

より適切に診断するために、リクエスト URL の作成方法を示すコードを共有していただけますか?

于 2014-04-07T17:03:02.900 に答える