Tôi đang tạo ứng dụng di động nền tảng chéo (sử dụng công cụ Xamarian, MonoTouch/MonoDroid). Tôi đang cố gắng để làm việc thông qua các quy trình xác thực và đang chạy vào một trở ngại. Tôi đã tìm kiếm tất cả hơn cho một câu trả lời rõ ràng và vẫn chưa tìm thấy nó.Cách "đúng" để thực hiện oAuth từ ứng dụng khách di động
Dưới đây là tổng quan về thiết lập hiện tại của tôi.
Tôi có một trang web được xây dựng trong các nút. Tôi sử dụng passport.js để đăng nhập oAuth trên trang web. Điều này làm việc tuyệt vời, người dùng có thể đăng nhập vào trang web của tôi bằng cách sử dụng Twitter hoặc Facebook.
Bây giờ, tôi muốn mở rộng chức năng đăng nhập tương tự này cho các khách hàng di động của mình.
tôi thấy 2 lựa chọn
Nhúng id ứng dụng và ứng dụng bí mật trong các khách hàng điện thoại di động và làm trực tiếp OAuth cuộc gọi đến FB hoặc Twitter từ ứng dụng di động
Proxy OAuth cuộc gọi thông qua của tôi máy chủ web nodejs hiện tại (giữ các khóa bí mật trên máy chủ)
Tùy chọn 2 dường như là cách ưa thích (vì nó tránh phải "gửi" số an toàn t trong các ứng dụng dành cho thiết bị di động).
Tôi có phương pháp proxy chủ yếu là làm việc.
- tôi mở một WebView trong ứng dụng di động của tôi và trỏ nó tại
http://mysever/auth/twitter
- này chạy qua mã passport.js hiện tại của tôi và chuyển hướng WebView di động trên trang đăng nhập Twitter.
- Người dùng sau đó nhập số tín dụng của họ trên trang web twitter trên thiết bị.
- Twitter sau đó gọi URL gọi lại oAuth của tôi (đó là máy chủ web nodejs của tôi).
- Máy chủ và Twitter của tôi xử lý lại lần thứ tư để lấy thông tin hồ sơ người dùng (Như tôi đã hiểu, đây là chìa khóa để tiếp cận này, máy chủ và twitter của tôi xử lý cái bắt tay, ứng dụng di động không phải làm bất cứ điều gì hoặc vượt qua bất kỳ thẻ trong quá trình này)
đây là vấn đề của tôi:
đây là bước cuối cùng này rằng gốc cây tôi. Khi bắt tay hoàn thành trên máy chủ của tôi, tôi có thông tin người dùng tôi cần trên máy chủ và cần gửi lại cho ứng dụng khách di động
Tôi không thể tìm ra bất kỳ cách nào trong điều khiển WebView để lấy đối tượng phản hồi và lấy cookie hoặc giá trị tiêu đề (ví dụ) (điều này có vẻ đúng đối với Android và iOS). Tôi không nghĩ đó là nền tảng cụ thể. Tôi nghĩ rằng tôi đang cố gắng làm một cái gì đó mà một widget WebView trong nền tảng di động chỉ không hỗ trợ. Nó làm cho tôi nghĩ rằng tôi đang thiếu một cái gì đó hiển nhiên.
Điều duy nhất tôi đã tìm ra là để máy chủ web "chuyển hướng" trình duyệt của khách hàng di động đến URL giả có thông tin người dùng trong chuỗi truy vấn. Một cái gì đó như myapp: // info? Userid = 1234
Sau đó, trong ứng dụng dành cho thiết bị di động, tôi có thể chiếm đoạt URL tải và lấy url này và nhận dữ liệu tôi cần. Sau đó tôi có thể đánh cắp userinfo này, đóng điều khiển WebView và chuyển sang màn hình gốc trong ứng dụng di động của tôi và người dùng userinfo trong bất kỳ lệnh REST tiếp theo nào đến máy chủ nodejs của tôi như một phương tiện nhận diện người dùng.
Đây là kludgy ồ ạt vì nhiều lý do. Lớn nhất trong số đó là url được gửi qua dây không được mã hóa và có tất cả dữ liệu ở dạng văn bản thuần túy.
Có cách nào tốt hơn để lấy dữ liệu từ máy chủ web quay lại ứng dụng khách di động?
Hoặc tôi có làm sai không?
những cách tiếp cận đã cuối cùng bạn giải quyết trên? Tôi bị mắc kẹt trong cùng một tình huống khó xử với Phương án 2 của bạn là cách tiếp cận lý tưởng. –
Thành thật mà nói, tôi không bao giờ tìm thấy một giải pháp hoạt động tốt. Điều được chấp nhận chung dường như là gửi bí mật trong ứng dụng dành cho thiết bị di động. Mọi người dường như nướng nó vào ứng dụng và không quan tâm nhiều hơn thế. –
Bất cứ ai khác chỉ cảm thấy như OAuth là một mớ hỗn độn đầy đủ của giải thích và triển khai một nửa arsed? – Jammer