2016-02-03 18 views
5

Tôi đã googling hơn một ngày nay. Có thể tôi đang thiếu từ khóa chính xác.Bảo mật khóa API trong Angular2

tôi có các thiết lập sau:

  • ExpressJS API (chạy với PM2 trên cổng 3000)
  • Angular2 ứng dụng - phục vụ qua nginx

Cả hai chạy trên cùng một máy chủ.

Các cuộc gọi đến các api (mydomain/api /) đều được proxy để 127.0.0.1:3000

Đối với cuộc gọi api mà cần xin phép, tôi sẽ sử dụng JWT và xác thực người dùng.

Điều tôi muốn đạt được là tôi tạo mã thông báo cho ứng dụng angular2 được phép/yêu cầu thực hiện cuộc gọi công khai (danh sách sản phẩm chẳng hạn).

Mã thông báo này cần phải được chuyển an toàn tất nhiên vì tôi không muốn người khác nhận được sản phẩm và giá của tôi qua cuộc gọi api trực tiếp (có mã thông báo bị đánh cắp).

Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

0

Mã thông báo của bạn hy vọng sẽ di chuyển bằng https. Và khi nó họ không thể có được nó ...

CẬP NHẬT

từ wiki:

Vì HTTPS piggybacks HTTP hoàn toàn trên đầu trang của TLS, toàn bộ giao thức HTTP cơ bản có thể được mã hóa . Điều này bao gồm các URL yêu cầu (trong đó đặc biệt là trang web được yêu cầu), truy vấn thông số, tiêu đề,

https://en.wikipedia.org/wiki/HTTPS

+0

Xin lỗi, tôi hơi ngu ngốc trong phần này. Tôi sẽ thiết lập https tất nhiên. Nhưng tôi sẽ vẫn phải bao gồm mã thông báo công khai của tôi trong thông số Yêu cầu Header/url từ ứng dụng góc cạnh, vì vậy nó hiển thị cho bất kỳ ai. Hay tôi đang thiếu một cái gì đó? – user1261284

+0

xem wiki, vì https là giao thức tầng ứng dụng, nó cũng đang mã hóa các tiêu đề. – eesdil

+1

Có, bạn cột bao gồm mã thông báo trong mỗi cuộc gọi. Nhưng mã thông báo đó được tạo trên máy chủ ... Tôi có thiết lập tương tự ngay bây giờ (express - angular 2) tôi sẽ gửi luồng công việc của tôi như là câu trả lời ở đây. –

1

Thứ nhất, như @eesdil nói, bạn phải sử dụng HTTPS. Trong trường hợp đó, tất cả các cuộc gọi của bạn được mã hóa và an toàn.

Trong ví dụ của tôi (Angular 2, Express và JWT), tôi đã sử dụng mô-đun mật mã với thuật toán pbkdf2 cho mật khẩu băm.

Đây là quy trình làm việc:

  • /đăng nhập/đăng ký -> Mật mã băm và tạo ra muối -> cửa hàng nó trên máy chủ
  • /login -> xác nhận mật khẩu chống lại được lưu trữ một -> tạo JWT -> tiết kiệm nó trong localStorage trên client
  • /api -> gửi JWT trong Auth tiêu đề -> xác nhận trên máy chủ -> gửi trả lời

dụ làm việc là ở đây: https://github.com/vladotesanovic/angular2-express-starter

+0

Ok, cảm ơn bạn rất nhiều. Nhưng giả sử ứng dụng khởi động của bạn sẽ liệt kê các thành phố tại trang chủ. Tôi không muốn mọi người gọi trực tiếp api/thành phố. Vì vậy, tôi tạo ra một JWT được gán nội bộ cho các cuộc gọi api công cộng. Tôi có thể cung cấp JWT công khai thông qua phiên giao dịch một cách an toàn mà tôi đoán. Tôi sẽ thiết lập https và ý tưởng của tôi trong toàn bộ điều và trở lại với kết quả. – user1261284

+0

Không, không sử dụng phiên và cookie để lưu trữ hoặc chuyển mã thông báo jwt. Không có vấn đề gì từ vị trí họ gọi/api/thành phố mà họ cần phải có jwt hợp lệ. Tôi sẽ cải thiện ví dụ của tôi với chức năng/refresh. Bạn có thể mã hóa jwt ở phía máy khách và xem khi nào hết hạn ... –

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