2012-04-26 36 views
5

Tôi đang cố gắng tìm hiểu về Android AccountManager và OAuth. Những gì tôi muốn làm là không cho phép điện thoại có quyền truy cập vào mật khẩu. (Đó là những gì Google đề xuất: "Be Smart About Security!") Vì vậy, tôi thanh toán đơn đăng ký mẫu Google SampleSyncAdapter và bắt đầu đọc qua mã. thì tôi thấy điều này xảy ra trong AuthenticatorActivity:SampleSyncAdapter lưu trữ mật khẩu thuần văn bản?

private AccountManager mAccountManager; 
private String mPassword; 

/** 
* ... Sets the 
* AccountAuthenticatorResult which is sent back to the caller. We store the 
* authToken that's returned from the server as the 'password' for this 
* account - so we're never storing the user's actual password locally. 
* 
* @param result the confirmCredentials result. 
*/ 
public void handleLogin(View view) { 
    .... 
    mPassword = mPasswordEdit.getText().toString();  
    .... 
    Log.d(TAG, "mPassword set to Account:" + mAccountManager.getPassword(account)); 
} 

private void finishLogin(String authToken) { 
    .... 
    mAccountManager.addAccountExplicitly(account, mPassword, null);   
    .... 
} 

Thông điệp tường trình này được "mPassword được đặt thành Tài khoản: kiểm tra". Đây là một cách nào đó có thể hiểu được khi bạn đọc phần còn lại vì điều này

protected String doInBackground(Void... params) { 
    .... 
    return NetworkUtilities.authenticate(mUsername, mPassword);  
    .... 
} 

nếu mật khẩu là một dấu hiệu này sẽ không hoạt động. Ngoài ra tôi sẽ mong đợi phần còn lại của mã để làm việc khác nhau trong Authenticator trên getAuthToken() Tôi giả sử tôi hoàn toàn sai về một cái gì đó nhưng tôi chỉ muốn sử dụng AccountManager để lưu trữ kết quả của một OAuth "Dance" để tôi có thể sử dụng Tài khoản này để xác thực dịch vụ JSON RESTful của mình.

Ai có thể chiếu sáng điều này không?

Trả lời

0

Từ các tài liệu chúng ta có thể đọc:

Điều quan trọng là phải hiểu rằng lý Tài khoản không phải là một dịch vụ mã hóa hoặc một keychain. Nó lưu trữ thông tin tài khoản ngay khi bạn vượt qua chúng, ở dạng văn bản thuần túy. Trên hầu hết các thiết bị, đây không phải là một mối quan tâm đặc biệt, bởi vì nó lưu trữ chúng trong một cơ sở dữ liệu mà chỉ có thể truy cập root. Nhưng trên thiết bị gốc, thông tin đăng nhập sẽ có thể đọc được bởi bất kỳ ai có quyền truy cập adb vào thiết bị.

Vì vậy, theo tôi hiểu, đây là vấn đề lạm dụng các từ (mật khẩu và mã thông báo). Tôi đoán quy trình như sau:

  1. Bạn yêu cầu người dùng cung cấp thông tin đăng nhập và mật khẩu.
  2. Trong ứng dụng của bạn, bằng cách nào đó bạn gửi thông tin đăng nhập và mật khẩu này cho máy chủ của mình.
  3. Căn cứ vào thông tin này, máy chủ của bạn tạo mã thông báo và gửi lại cho ứng dụng của bạn.
  4. Tài khoản Người quản lý lưu trữ mã thông báo này bằng văn bản thuần túy và sau đó mã thông báo này được sử dụng để xác thực người dùng của bạn.
+0

Điều gì xảy ra nếu mã thông báo không hợp lệ sau một khoảng thời gian nhất định? Tôi đoán bạn chỉ cần nhắc lại người dùng về mật khẩu của họ trong trường hợp đó. Nhưng nhiều dịch vụ (ví dụ Facebook) không bao giờ nhắc tôi mật khẩu, vì vậy 1) mã thông báo họ tạo không bao giờ hết hạn, làm cho nó cơ bản tốt như mật khẩu về bảo mật hoặc 2) họ đang lưu trữ mật khẩu của tôi (văn bản thuần túy hoặc được mã hóa). –

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