2017-01-06 14 views
5

Tôi quan tâm đến việc bắt đầu một ứng dụng web nền tảng chéo (web + di động) được cho là có cơ sở người dùng trung thành của riêng mình (như bất kỳ ứng dụng tốt).Ứng dụng nền tảng chéo: Android + Tùy chỉnh REST phụ trợ (Yii2) + Nhà cung cấp SSO bên thứ ba để đăng nhập (Google+)

Phần cuối được hỗ trợ bởi khung công tác Yii2 (PHP) và hiển thị một số điểm cuối REST yêu cầu xác thực bởi người dùng (mã thông báo truy cập oAuth2). Người dùng có thể lấy mã thông báo truy cập bằng cách gọi một điểm cuối API "đăng nhập" chuyên dụng, đó là phần dễ dàng và không liên quan đến câu hỏi này.

Phiên bản web của ứng dụng của tôi cũng cho phép người dùng đăng nhập thông qua SSO bên ngoài (ví dụ: Google+) khiến người dùng được tự động tạo trong cơ sở dữ liệu người dùng nội bộ (cộng với kết nối với ID Google bên ngoài). cùng một người dùng khiến cùng một người dùng "nội bộ" được tự động đăng nhập).

Điều này có tác dụng tốt đối với cặp web + REST API, tuy nhiên, khi chúng tôi đưa Android vào hình ảnh, mọi thứ bắt đầu trở nên phức tạp.

Ứng dụng Android có thể cung cấp cho người dùng tùy chọn đăng nhập thông qua tiểu sử trên Google+ của mình thông qua SDK Android chuẩn và chúng tôi có thể truy xuất danh tính Google của anh ấy theo cách này. Tuy nhiên, vấn đề là - cách trao đổi an toàn danh tính Google mà ứng dụng Android có, cho mã thông báo truy cập do REST API cung cấp mà không yêu cầu người dùng nhập tên người dùng và mật khẩu trong cơ sở dữ liệu nội bộ của chúng tôi (mật khẩu được tự động tạo trong SSO đầu tiên đăng nhập, vì vậy người dùng cuối không bao giờ biết mật khẩu của mình, anh ta chỉ sử dụng SSO để đăng nhập trên cả nền tảng web và di động). Từ khóa ở đây là "an toàn" vì nếu chúng tôi tin tưởng rằng ứng dụng Android đã xác thực chính xác người dùng và bằng cách nào đó "danh sách trắng" liên lạc giữa ứng dụng Android và điểm cuối REST (ví dụ: thông qua "mã thông báo truy cập dịch vụ" mà chỉ ứng dụng Android mới biết), một hacker tiềm năng có thể đảo ngược kỹ sư hoặc ngửi thông tin liên lạc giữa hai người và có thể gọi trực tiếp các thiết bị đầu cuối REST, xác định chính mình bằng cách sử dụng cùng một mã thông báo truy cập đáng tin cậy. Thực tế, nhận mã thông báo truy cập cho bất kỳ người dùng ngẫu nhiên nào.

Trả lời

2

Có thể sử dụng Trình quản lý tài khoản? https://developer.android.com/reference/android/accounts/AccountManager.html https://developer.android.com/training/id-auth/custom_auth.html

Bạn có thể tự tạo tài khoản của riêng mình và sau đó sử dụng trình quản lý tài khoản gốc và người bản xứ?

Trong ứng dụng tôi sử dụng như sau: trong Yii2 RestService sử dụng HttpBearerAuth và trong Andorid App Tạo tài khoản tùy chỉnh có đăng nhập và mật khẩu, Sau đó sử dụng tài khoản này để tạo yêu cầu http. Tất cả thông tin đăng nhập đều do Android quản lý.

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