2012-05-11 50 views
7

Tôi đang viết ứng dụng Android đàm thoại với máy chủ từ xa và tôi muốn cho phép người dùng ứng dụng đăng nhập vào máy chủ bằng cách sử dụng thông tin đăng nhập google cư trú trên điện thoại của họ, tức là không yêu cầu người dùng nhập mật khẩu google của họ ở bất cứ đâu trong ứng dụng của tôi. Ví dụ: nếu điện thoại (Android) của người dùng đã được định cấu hình với "[email protected]", sau đó họ cài đặt và chạy ứng dụng của tôi, ứng dụng của tôi sẽ hiển thị chúng với hộp thoại có nội dung "Bạn có muốn đăng nhập bằng someguy @ không gmail.com? ", và khi nhấn nút Ok, họ đã thiết lập một id trên máy chủ của tôi biết địa chỉ email của họ là [email protected], được chứng nhận bởi chính google.Ủy quyền tài khoản Google trong ứng dụng Android

Tôi đã tìm thấy một phần công thức nấu ăn rộng rãi và đa dạng về cách thực hiện điều này, bao gồm tài liệu oauth2 của chính Google, nhưng chưa biết cách làm cho tất cả diễn ra.

Tôi có mã Android sử dụng Trình quản lý tài khoản để tìm ra tài khoản google nào trên một điện thoại cụ thể. Tôi nhắc người dùng sử dụng tài khoản google nào họ muốn sử dụng để đăng nhập và sau đó tôi nhận lại mã thông báo ủy quyền.

Quá thời điểm đó, tôi đang quay bánh xe khá nhiều. Các công thức nấu ăn tôi đã nhìn dường như gọi cho tôi làm một get http của mẫu này:

http://<myWebServer>.com/_ah/login?continue=<someUrlIChoose>&auth=<authToken> 

... mà (a) được dissatisfying ở chỗ nó dường như là đặc trưng cho AppEngine và tôi muốn được tự do để chạy điều này trên bất kỳ đầu cuối nào mà tôi chọn, và (b) thậm chí thử nghiệm với appengine, thể hiện appengine mà tôi đã thiết lập dường như không được báo hiệu, tức là các bản ghi hiển thị các truy vấn tới nó (tôi đã hy vọng url someUrlIChoose sẽ được gọi với một cái gì đó) ... do đó không có cơ hội để được thông báo về tính hợp lệ của mã thông báo.

câu hỏi cụ thể sẽ bao gồm:

  • Tôi phải làm gì với thẻ auth ... làm tôi gửi nó tới máy chủ của tôi, và bằng cách nào đó có google máy chủ liên lạc của tôi để xác minh tính hợp lệ của mã thông báo cho tài khoản được chỉ định? Hoặc là có một số thông tin liên lạc backchannel được cho là đã có (ở giai đoạn này của quá trình ) bắt nguồn từ máy chủ google để thông báo cho máy chủ của tôi rằng mã thông báo này hợp lệ (và nếu vậy, làm cách nào để thiết lập)? Hoặc một cái gì đó khác?
  • Tôi có quyền giả sử rằng quá trình này có thể thực hiện được trong ngữ cảnh của bất kỳ đầu cuối nào (không chỉ là appengine) không?
  • Là oauth2 những gì tôi nên sử dụng (trái ngược với oauth1, hoặc một cái gì đó khác)? Tất cả mọi thứ tôi đọc dường như ngụ ý rằng hỗ trợ của google cho oauth2 là "thử nghiệm" ... nhưng tôi không xác định chắc chắn các xác nhận như vậy hiện tại hay cũ; và ngay cả khi hiện tại, google có lịch sử giữ các sản phẩm khác nhau ở dạng không cố định vĩnh viễn (ví dụ: phiên bản beta vĩnh cửu), vì vậy tôi không biết phải kết luận điều gì về điều này.
  • Mọi thứ khác có liên quan ...

Trả lời

0

Đây có phải là điều bạn đang nói đến không?

Hầu hết các ứng dụng Android có một số loại đầu cuối phía máy chủ, để duy trì và chia sẻ dữ liệu. Ngay cả trò chơi cơ bản nhất cũng cần ghi nhớ điểm số cao của người chơi đó là .Khi bạn đang xây dựng kết thúc của mình, một vấn đề là bạn phải giải quyết là cách mã back-end biết ứng dụng nào đang nói và ai là người sử dụng nó.

Bạn có thể có điểm cuối HTTP để liên lạc với ứng dụng khách , nhưng làm cách nào mã phía máy chủ có thể chắc chắn ai đang gửi tin nhắn cho nó? Sau khi tất cả, bất cứ ai có thể gửi yêu cầu HTTP POST từ bất cứ nơi nào; họ có thể mạo danh người dùng của bạn nếu họ có thể đoán số nhận dạng của họ không?

Thực sự không thân thiện với người dùng để yêu cầu mọi người nhập tên người dùng và mật khẩu trên thiết bị di động. Đặc biệt, nếu ai đó đã cài đặt ứng dụng của bạn và cho phép sử dụng Internet và biết thông tin nhận dạng của bạn, chúng sẽ không bị ảnh hưởng nữa.

Hóa ra dịch vụ của Google Play hiện khả dụng trên mọi thiết bị tương thích chạy phiên bản Android 2.2 trở lên, cung cấp giải pháp tốt cho vấn đề này, dựa trên việc sử dụng Tài khoản Google.

http://android-developers.blogspot.se/2013/01/verifying-back-end-calls-from-android.html

2

Bạn phải nhập google-play-services_lib sau hơn bạn có thể sử dụng mã này:

import com.google.android.gms.auth.GoogleAuthUtil; 
import com.google.android.gms.auth.UserRecoverableAuthException; 

private void gmail_login() { 

    dialog = ProgressDialog.show(LoginActivity.this, "", getString(R.string.login_loading), true); 

    AsyncTask task = new AsyncTask() { 
     @Override 
     protected Object doInBackground(Object... params) { 
       getAndUseAuthTokenBlocking(); 
      return null; 
     } 
    }; 
    task.execute((Void)null); 
} 


void getAndUseAuthTokenBlocking() { 
    try 
    { 
     String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.email"; 
     AccountManager accountManager = AccountManager.get(this); 
     Account[] accounts = accountManager.getAccountsByType("com.google"); 

     String token = GoogleAuthUtil.getToken(this, accounts[0].name, AUTH_TOKEN_TYPE); 
     //token here 
    } 
    catch (UserRecoverableAuthException userAuthEx) { 
     startActivityForResult(userAuthEx.getIntent(), MY_ACTIVITYS_AUTH_REQUEST_CODE); 
    }catch (Exception e){ 
     DropErrorMsg.drop(this, handler, R.string.connection_error, R.string.error, dialog, false); 
    } 
} 
Các vấn đề liên quan