2011-12-01 4 views
7

Tôi đang viết ứng dụng Google App Engine cùng với ứng dụng khách CLI, ứng dụng khách Android và ứng dụng khách Javascript. Mục đích của ứng dụng này là cho phép người dùng điều khiển điện thoại Android mà máy khách Android được cài đặt, bằng cách sử dụng CLI hoặc ứng dụng khách Javascript.Trên Google App Engine, tôi có thể liên kết Mã thông báo OAuth 2 của Google và mã thông báo SACSID mà tôi đã sử dụng Trình quản lý tài khoản của Android không?

Xác thực đóng một vai trò quan trọng vì lỗi có thể cho phép người dùng độc hại kiểm soát điện thoại của người khác.

Ứng dụng khách Android được viết và hoạt động. Nó xác thực người dùng bằng cách sử dụng this method. Về cơ bản, điều này cho tôi một cái gọi là mã thông báo SACSID tôi có thể lưu trữ trong một cookie. Khi cookie này được đặt, App Engine sẽ nhận ra người dùng của tôi. Ứng dụng máy chủ sau đó có thể gọi UserService để có được một Người dùng gọi getUserId(). getUserId() trả về cho tôi một chuỗi mờ xác định người dùng của tôi. Càng xa càng tốt.

Bây giờ tôi đang viết các máy khách JS và CLI. Vì ứng dụng khách CLI không có cách nào đáng tin cậy để hiển thị CAPTCHA hoặc mở trình duyệt, tôi cho rằng nó cần sử dụng Device API ("Đăng nhập của khách hàng" không phải là một tùy chọn). API này yêu cầu sử dụng OAuth 2 để xác thực. Ngoài ra, tôi muốn ứng dụng khách JS truy cập vào danh sách liên hệ của người dùng, điều này dường như chỉ ra rằng OAuth 2 sẽ phù hợp.

Nếu người dùng của tôi xác thực bằng OAuth 2, liệu tôi có thể chuyển đổi mã thông báo Google OAuth 2 này thành chuỗi tương tự mà tôi nhận được khi khách hàng Android kết nối không? Nếu không, tôi có thể sửa đổi ứng dụng Android của mình để nó sử dụng OAuth thay vì mã thông báo Sacsid không?

Để cụ thể hơn, tôi thấy ba điều mà sẽ giải quyết vấn đề của tôi:

  1. Một cách để nhận được một mã thông báo OAuth 2 từ Account Manager
  2. Một cách trao đổi các mã thông báo OAuth 2 cho một Mã thông báo SACSID
  3. Cách nhận cùng một UserID mờ cùng với mã thông báo SACSID và OAuth2, nhưng chỉ khi tôi có thể có cả hai hệ thống xác thực trên cùng một ứng dụng.

Điều gì đó có vẻ tương tự như giải pháp thứ ba có thể là lấy địa chỉ email của người dùng từ cả mã thông báo OAuth và SACSID và sử dụng ID đó làm ID người dùng. tuy nhiên điều này có vẻ hơi vụng về với tôi:

  • Mỗi lần tôi nhận được yêu cầu OAuth 2, tôi sẽ cần phải gọi API của Google để lấy địa chỉ email của người dùng (hoặc xây dựng hệ thống riêng của tôi về thẻ mà có vẻ không an toàn và giới thiệu nhiều khó khăn khác).
  • Địa chỉ email của một người dùng cụ thể có thể thay đổi, khiến tôi mất liên kết giữa người dùng và dữ liệu trước đó của mình.

Trả lời