2013-11-27 40 views
5

Tôi đã thấy các câu hỏi khác về SO về điều này (here, herehere), nhưng tôi không hài lòng với bất kỳ giải pháp nào, vì vậy tôi hỏi lại. Tôi đang bắt đầu một ứng dụng web sẽ sử dụng OAuth từ nhiều nhà cung cấp (Google, Facebook, Twitter, Yahoo) để xác thực. Tôi đang đấu tranh để tìm một cấu hình phù hợp để sử dụng cho cả môi trường phát triển địa phương và môi trường sản xuất.Sử dụng OAuth cho cả môi trường phát triển và sản xuất

Các giải pháp hàng đầu tôi đã tìm thấy là phải đăng ký nhiều ứng dụng trong mỗi nhà cung cấp, tiếp nhận một chìa khóa khác nhau của người tiêu dùng và bí mật cho mỗi:

"App sản xuất của tôi" - với một callback URI để http://www.myapp.com/callback

"Phát triển ứng dụng của tôi" - với một callback URI để http://local.myapp.com/callback

Thêm một mục để host nội bộ của bạn tập tin chỉ local.myapp.com-127.0.0.1 và s cấu hình cho ứng dụng của bạn để sử dụng các khóa người tiêu dùng phù hợp dựa trên môi trường, và bạn tốt để đi, phải không? Tuy nhiên, ứng dụng của tôi là responsive và tôi cần kiểm tra môi trường phát triển đang chạy trên PC của mình từ nhiều thiết bị khác, như iPhone và iPad của tôi, cả hai thiết bị này đều không thể giải quyết URI gọi lại phát triển.

Giả sử tôi đã có một máy chủ DNS trên mạng của mình và có thể thêm mục nhập cho local.myapp.com ở đó thay vì tệp máy chủ cục bộ của tôi và hiện có thể truy cập cá thể phát triển của tôi từ bất kỳ thiết bị nào trên mạng.

Nhưng nhóm phát triển của tôi đều hoạt động trên cùng một mạng cục bộ. Bây giờ, local.myapp.com trỏ tới cùng một địa chỉ IP cho tất cả mọi người. Hãy quay trở lại để thiết lập các tập tin host trên mỗi máy tính của nhà phát triển để họ có thể làm việc độc lập từ bên trong máy trạm của họ. Bây giờ không ai có thể kiểm tra ví dụ phát triển của họ từ iPhone của họ một lần nữa. Nó hầu như không có vẻ giống như câu trả lời đúng cho mỗi nhà phát triển để đăng ký một ứng dụng với nhà cung cấp chỉ để họ có thể chỉ định một URI gọi lại duy nhất.

Thông thường khi tôi xuống đường trong cỏ dại với một giải pháp phức tạp cho một vấn đề có vẻ đơn giản, điều đó thường có nghĩa là tôi đang làm điều gì đó sai về cơ bản. Tôi có thiếu một cái gì đó về OAuth, nó không có ý định được sử dụng như thế này? Tôi bị cám dỗ để loại bỏ OAuth hoàn toàn và chỉ cần đi với OpenID (không yêu cầu đăng ký ứng dụng và có thể chỉ định URI gọi lại từ bên trong ứng dụng), nhưng sau đó tôi mất hai trong số những người lớn trong Facebook và Twitter. Tôi không thực sự cần bất kỳ dữ liệu của người dùng, nó chỉ là một tốt đẹp để có nếu nó có sẵn. Ai đó có thể nói lại với tôi về OAuth không?

+0

chỉ để thử nghiệm đúng không? Tại sao không có mỗi ứng dụng web như một thư mục ảo? – codemonkeh

+0

Tôi không thực sự theo dõi những gì bạn đang nhận được. Bạn có thể xây dựng? – schmimd04

+0

Bạn đã bao giờ tìm được giải pháp chưa? Tôi đang đấu tranh với chính xác điều tương tự; các nhà cung cấp oauth không cho phép các ký tự đại diện có nguồn gốc vì vậy tôi không thể có 'alice.dev.myapp.com' và' bob.dev.myapp.com' nhưng nếu tất cả các nhà phát triển chia sẻ 'dev.myapp.com' tôi không không biết cách chỉ định máy tính bảng và điện thoại tại nhà phát triển chính xác. Tạo điểm nhập oauth cho mỗi nhà phát triển có vẻ là cách duy nhất. – mczepiel

Trả lời

0

tôi đăng các câu trả lời sau đây về một ứng dụng đường ray tôi đã viết:

OAuth2 in development and production

Đó là một viên ngọc gọi là Figaro mà làm mỗi configs env cho google OAuth2.

+0

Điều đó trông giống như một công cụ ưa thích để quản lý các tệp thuộc tính. Điều gì về việc thử nghiệm ứng dụng của tôi đang chạy trên PC của tôi từ iPhone của tôi khi cuộc gọi lại OAuth truy cập vào local.myapp.com? – schmimd04

0

Tôi không thể nói cho FB hoặc Twitter, nhưng trong triển khai Oauth của Google, bạn có thể đăng ký một số URL gọi lại oauth. Vì vậy, bạn chỉ cần một số logic trong ứng dụng của bạn có nghĩa là nó đang ở chế độ thử nghiệm, và sau đó bắt đầu luồng Oauth với URL gọi lại thích hợp. Có những nhược điểm, ví dụ như xung đột giữa mã thông báo làm mới và thử nghiệm, nhưng chúng có thể quản lý được.

Trong ứng dụng của tôi, tôi có một singleton quản lý tất cả những điều này.Khi ứng dụng của tôi cần bắt đầu luồng Oauth, nó gọi singleton với URL yêu cầu và bất kỳ dữ liệu nổi bật nào khác (ví dụ: cờ gỡ lỗi) và singleton trả lại URL gọi lại chính xác, ID ứng dụng khách, v.v.

+0

Chắc chắn, tôi có thể xử lý logic để biết liệu đó là sản xuất hay phát triển và sử dụng đúng khóa/bí mật của người tiêu dùng. Nhưng những gì về thử nghiệm từ iPhone của tôi trong dev với một uri gọi lại mà iPhone của tôi không thể giải quyết? Tôi cần phải thử nghiệm từ các thiết bị di động đang phát triển. – schmimd04

+0

Vì vậy, đây là một vấn đề DNS? Sử dụng một cái gì đó như AWS Route 55 và đăng ký máy chủ dev của bạn ở đó để nó giải quyết công khai. IPhone có thể được cấu hình để sử dụng máy chủ proxy không? nếu có, có thể bạn cũng có thể giải quyết vấn đề của mình với một số quy tắc định tuyến proxy. Nếu nó giúp, tôi sẽ vui vẻ thiết lập một máy chủ dev như một tên miền phụ trên một trong các tên miền mà tôi quản lý. – pinoyyid

0

Tôi chưa tìm thấy một phương pháp tiếp cận thủ công ít hơn cho phép truy cập dev vào tất cả các thiết bị có liên quan:

  1. Gán mỗi máy của nhà phát triển IP cố định qua hệ thống DHCP cục bộ dựa trên địa chỉ MAC của họ hoặc (ít được đề nghị hơn) để họ chọn IP và hy vọng cho tốt nhất
  2. (tùy chọn *) Gán mỗi máy của nhà phát triển tên máy chủ DNS trong mạng cục bộ dựa trên IP
  3. đó
  4. Đăng ký mục nhập oauth cho nhà phát triển trên từng nhà cung cấp với tên máy chủ của máy của nhà phát triển.
  5. Mỗi nhà phát triển định cấu hình ứng dụng của họ để sử dụng mã thông báo nhà phát triển oauth duy nhất của họ.

Giả sử tất cả các thiết bị trong mạng dựa trên DHCP và DNS server tương tự sau đó bạn sẽ có thể đến thăm alice.dev.myapp.com hoặc bob.dev.myapp.com từ bất kỳ thiết bị trên mạng.

Lưu ý, bạn sẽ quản lý cấu hình oauth cho từng môi trường khác một cách riêng biệt, nhưng theo cùng một cách tiếp cận.

Có thể có các công cụ để tự động đăng ký máy IP của nhà phát triển và tên máy chủ để giảm bớt phần đó của câu đố. Đăng ký cấu hình oauth trên mỗi nhà cung cấp trên mỗi dev là bước tẻ nhạt nhất.

CẬP NHẬT

* Bạn có thể bỏ qua phần DNS nếu bạn sử dụng một ví dụ xip.io url 10.0.0.123.xip.io nếu bạn biết Alice là 10.0.0.123 nhưng bạn vẫn muốn IP đó được khắc phục vì bạn không muốn tiếp tục cập nhật url cho mã thông báo oauth ở bước 4.

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