10

スマートテレビ用のJavaScriptアプリを作成して、テレビにダッシュボードを表示しています。JIRARESTAPIを使用してダッシュボードのリストを取得します。これに使用するURLは次のとおりです。

jira/rest/api/2/dashboard?startAt=&maxResults=

その後、私はテレビでそれらを表示するために次のようにウォールボードを作成します:

jira/plugins/servlet/Wallboard/?dashboardId=&os_username=&os_password=

とのおかげでos_usernameos_passwordJIRAは私が認証されていることを認識し、正しいリストを取得します。このリストは最初から必要なものですが、パラメーターos_usernameを使用して上記のURLを呼び出すとos_password、正しいリストが取得されるためです。

しかし、テレビの起動時/ JIRAでダッシュボードのリストを初めて取得するときは、認証された人がいないため、取得する必要のあるリストではなく、ランダムなリストを取得します。

以下のコマンドを使用してJIRAで認証する方法がいくつかあります。

curl -D- -u fred:fred -X GET -H "Content-Type: application/json"         http://example.com/rest/api/2/issue/createmeta

しかし、JavaScriptでそのコマンドを使用する方法がわかりません。

したがって、基本認証を使用してJIRAで認証する方法を教えてもらえますか。非常に重要なのは、JavaScriptである必要があるということです。

4

2 に答える 2

21

あなたはここからこれを手に入れたと思います。同じページで、「自分でやる」方法が説明されています。JS で同じリクエストを実行するために必要な手順を「翻訳」します。

  1. リクエスト メソッドはGETである必要があります
  2. Authorization Header と Content-Type Header の2 つのヘッダーが必要です。Content-type ヘッダーは次のようになります: "Content-Type: application/json"

Authorization ヘッダーの場合:

  1. username:passwordの形式の文字列を作成します
  2. Base64で文字列をエンコードします ( window.btoa()window.atob( ) を使用します) -実際には 2 番目のものは必要ありませんが、参考のためにそこに置きます
  3. エンコードされた文字列が後に続くコンテンツ「Basic」を含む「Authorization」ヘッダーを提供します。たとえば、文字列「fred:fred」は base64 で「ZnJlZDpmcmVk」にエンコードされるため、Authorization ヘッダーは 「Authorization: Basic ZnJlZDpmcmVk」のようになります。

したがって、最終的には、提供された 2 つのヘッダーを使用して GET 要求を行う必要があり、承認を受ける必要があります。また、 Base64 はリバース可能であり、暗号化機能ではないことに注意してください。エンコーディングです。リクエストはもちろん HTTPS を通過しますが、SSL が壊れている場合、Base64 でエンコードされた文字列が逆になる可能性があります。

于 2013-02-22T11:48:01.787 に答える
3

独自の JIRA インスタンスを持っている場合は、サイトをホワイトリストに登録して、最初にドメインの CORS を有効にする必要があります。

JIRA Server をご利用の場合は、JIRA 管理の「ホワイトリスト」セクションに移動し、リソースをリクエストするドメインを追加してください。

そうしないと、ブラウザーの同一生成元ポリシー ( http://enable-cors.org/ )に違反するため、リクエストはエラーで終了します。

重要: JIRA オンデマンド / クラウドを使用している場合、純粋な JavaScript / クライアント側コードを使用して Basic 認証で API に正常にアクセスすることはできません。これはセキュリティ上の理由によるもので、残念ながらアトラシアン チームから提供された解決策はまだないようです。これを解決する 1 つの解決策は、サーバーにプロキシを設定することです。これにより、JavaScript リクエストがブラウザから実際の JIRA インスタンスに転送されます。

コードのバグによる問題を回避するために、最初のステップとして CURL を使用して JIRA API にアクセスすることを強くお勧めします。

  curl -D- -X GET -H "Authorization: Basic %BASE64-CREDENTIDALS%" -H "Content-Type: application/json" "https://webjets.atlassian.net/rest/api/2/issue/WJ-333"

%BASE64-CREDENTIDALS% を実際の Base64 でエンコードされたユーザーとパスワードのペアに置き換える必要があることに注意してください。これは、JIRA ユーザーのメール アドレスではなく、JIRA ユーザー名でのみ機能することを知っておくことが重要です。通常、メール アドレスを使用して JIRA にサインインすることもできますが、API では機能しないため、これは混乱を招く可能性があります。

ドメインをホワイトリストに登録したら、準備完了です。次の詳細を使用してGETリクエストを作成します。

  1. コンテンツ タイプ ヘッダーを追加します。Content-Type: application/json
  2. 最初のBase64エンコーディングのユーザー名とパスワードで基本認証ヘッダーを追加します。

    var authCode = window.btoa( user + ":" + password ); var authHeader = "Authorization: Basic " + authCode;

  3. 次のような JIRA API エンドポイント URL でリクエストを実行します。

    https://%PROJECT%.atlassian.net/rest/api/2/issue/%ISSUE-ID%

jQueryを使用してリクエストを実行する方法については、StackOverflow の質問「How to use Basic Auth with jQuery and AJAX? 」を参照してください。

セキュリティ上の注意: 認証コードは暗号化された値ではなく、エンコーディングであることに注意してください。保管または提供する場所に注意してください。

于 2015-11-27T13:04:34.577 に答える