2013-02-21 59 views
6

Tôi đang tạo ứng dụng JavaScript cho TV thông minh để hiển thị trang tổng quan trên TV. Tôi nhận được danh sách các trang tổng quan với API REST JIRA. Url tôi sử dụng cho điều này là:Cách sử dụng Xác thực cơ bản với API REST JIRA trong JavaScript?

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

sau đó tôi có thể tạo một tấm ốp tường như sau để hiển thị chúng trên tv:

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

os_usernameos_password, JIRA biết tôi đang xác thực và nhận được danh sách phù hợp. danh sách này là một trong những tôi cần từ đầu nhưng vì tôi gọi url ở trên với các tham số os_usernameos_password nó có được danh sách bên phải

nhưng khi khởi động TV/lần đầu tiên tôi nhận được danh sách các trang tổng quan với JIRA không có ai được chứng thực vì vậy nó có một danh sách ngẫu nhiên, không phải là một trong những tôi cần phải nhận được.

có một số cách để xác thực trong JIRA với lệnh dưới đây:

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

nhưng tôi không biết làm thế nào để sử dụng lệnh trong JavaScript.

Vì vậy, bất kỳ ai cũng có thể cho tôi biết làm cách nào tôi có thể xác thực trong JIRA bằng xác thực cơ bản và CNTT rất quan trọng ĐÃ ĐƯỢC ĐỀ XUẤT.

Trả lời

17

Bạn nhận điều này từ here, tôi đoán vậy. Cũng trên cùng một trang nó được giải thích làm thế nào để "làm điều đó cho mình". Tôi sẽ "dịch" các bước mà bạn cần làm để quản lý thực hiện cùng một yêu cầu trong JS.

  1. Request Method nên GET
  2. Bạn nên có 2 tiêu đề: Authorization Header and Content-Type Header. header Content-type của bạn nên trông giống như: "Content-Type: application/json"

Đối với tiêu đề Authorization:

  1. Xây dựng một chuỗi các tên người dùng hình thức : mật khẩu
  2. Base64 mã hóa chuỗi (Sử dụng window.btoa()window.atob()) - Bạn thực sự KHÔNG cần thứ hai nhưng tôi đặt nó ở đó để tham chiếu
  3. Cung cấp tiêu đề "Ủy quyền" có nội dung "Cơ bản" theo sau chuỗi được mã hóa. Ví dụ, chuỗi "fred: fred" mã hoá để "ZnJlZDpmcmVk" trong base64, vì vậy Authorization Tiêu đề của bạn sẽ trông như thế ": "Authorization: Basic ZnJlZDpmcmVk"

Vì vậy, cuối cùng bạn cần phải thực hiện yêu cầu GET của bạn với hai Tiêu đề được cung cấp và bạn phải được Ủy quyền. Ngoài ra, BEWARE Base64 có thể đảo ngược và KHÔNG phải là một chức năng mã hóa. bị phá vỡ.

+0

Phương thức yêu cầu có thể nhận được vì JIRA không có hỗ trợ cho phương thức đặt hoặc đăng? –

+0

Bạn đã thử những gì bạn có gợi ý ở đây chưa. Nó có vẻ không hiệu quả với tôi. Vui lòng xem http://stackoverflow.com/questions/20812158/jira-rest-client-in-javascript-giving-syntax-while-using-jsonp –

+0

Có, tôi có và nó hoạt động tốt. –

2

Trong trường hợp bạn đang gặp dụ JIRA riêng của bạn, bạn nên lập danh sách trắng trang web của bạn để cho phép CORS cho miền của bạn đầu tiên:

Nếu bạn là khách hàng JIRA Server, chỉ cần vào "Whitelist" của JIRA Quản trị và thêm tên miền bạn muốn yêu cầu tài nguyên.

Nếu không, yêu cầu của bạn sẽ kết thúc do lỗi vì vi phạm chính sách cùng nguồn gốc của trình duyệt (http://enable-cors.org/).

Quan trọng: Nếu bạn đang sử dụng JIRA theo yêu cầu/đám mây, bạn sẽ không thể truy cập thành công API bằng Xác thực cơ bản bằng mã JavaScript/phía máy khách thuần túy. Điều này là do security reasons và rất tiếc có vẻ như không có giải pháp nào được cung cấp bởi nhóm Atlassian. Một giải pháp để giải quyết điều đó, có thể thiết lập proxy trên máy chủ của bạn, chuyển tiếp các yêu cầu JavaScript của bạn từ trình duyệt đến phiên bản JIRA thực tế.

Để tránh bất kỳ vấn đề có thể do lỗi trong mã của bạn, tôi khuyên bạn đề nghị để thử truy cập vào các API JIRA bằng cách sử dụng CURL như một bước đầu tiên:

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

Lưu ý rằng bạn phải thay thế% BASE64- CREDENTIDALS% với cặp người dùng/mật khẩu được mã hóa Base64 thực tế của bạn. Điều quan trọng cần biết là điều này chỉ hoạt động với tên người dùng JIRA chứ không phải với địa chỉ email người dùng JIRA. Điều này có thể gây nhầm lẫn, thông thường bạn cũng có thể đăng nhập tại JIRA bằng địa chỉ email nhưng sẽ không hoạt động với API.

Sau khi có danh sách trắng miền của bạn, bạn đã sẵn sàng để đi - xây dựng một GET yêu cầu với các chi tiết sau đây:

  1. Thêm một tiêu đề kiểu nội dung: Content-Type: application/json
  2. Thêm một tiêu đề xác thực cơ bản bằng đầu tiên Base64 tên truy nhập và mật khẩu mã hóa:

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

  3. Thực hiện các yêu cầu trên một URL endpoint JIRA API, như:

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

Xem StackOverflow câu hỏi "How to use Basic Auth with jQuery and AJAX?" cho phương pháp làm thế nào để thực hiện các yêu cầu sử dụng jQuery.

Thông báo bảo mật: Lưu ý rằng mã ủy quyền không phải là giá trị được mã hóa mà là mã hóa. Hãy cẩn thận nơi bạn lưu trữ hoặc cung cấp nó!

Các vấn đề liên quan