Google Smart Lock для паролей - доступен ли федеративный пароль для учетных данных приложению? (например, при сохранении действий пользователя по входу в Facebook или Google)

Мне было интересно, есть ли здесь проблема с безопасностью? Любое приложение, использующее умную блокировку Google, будет знать учетные данные пользователей Google, Twitter и т. Д., Верно? взгляните на это руководство Google здесь и в вызове credentialsRetrieved назад у объекта Credential есть имя пользователя и пароль, к которым приложение может получить доступ. Но теперь приложение знает учетные записи пользователей google или twitter? Вот код, о котором я говорю:

 private void onCredentialRetrieved(Credential credential) {
    String accountType = credential.getAccountType();
    if (accountType == null) {
        // Sign the user in with information from the Credential. 
//right here we have the users login credentials, dont we ??  There exposed. 
        signInWithPassword(credential.getId(), credential.getPassword());
    } else if (accountType.equals(IdentityProviders.GOOGLE)) {
        // The user has previously signed in with Google Sign-In. Silently
        // sign in the user with the same ID.
        // See https://developers.google.com/identity/sign-in/android/
        GoogleSignInOptions gso =
                new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .requestEmail()
                        .build();
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .setAccountName(credential.getId())
                .build();
        OptionalPendingResult<GoogleSignInResult> opr =
                Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
        // ...
    }
}

Итак, я вижу, что объект Credentials может раскрывать пароль пользователя. Я понимаю, что учетные данные необходимы для продолжения процесса входа в систему, но делает ли это выбор пользователя, когда он включает интеллектуальную блокировку?

худший случай: представьте, что пользователь включает интеллектуальную блокировку, и я создаю приложение, которое использует интеллектуальную блокировку. Теперь я получаю доступ к учетным данным пользователей Twitter и делаю вредоносные действия. Как защитить пользователя?


person j2emanue    schedule 02.01.2016    source источник


Ответы (1)


Я работаю в команде Smart Lock в Google, надеюсь, это ответит на ваш вопрос:

В случае Google, Facebook, Twitter или других «федеративных» учетных данных пароль для этих учетных записей поставщика удостоверений не сохраняется в учетных данных. Поле пароля для таких учетных данных пусто, а «учетные данные» служат только указателем на то, какой поставщик удостоверений пользователь использовал для данного приложения. Идея состоит в том, что сохранение и получение таких учетных данных позволит приложению узнать, что текущий пользователь имеет существующую учетную запись и должен использовать определенный метод входа (и может автоматически входить в систему, инициируя соответствующий поток, или помогает настроить пользовательский интерфейс, чтобы пользователь вошел в систему с помощью соответствующего метода, когда они вернутся).

Обратите внимание, что в текущей версии Play Services (8.4) API выдает ошибку, если приложение пытается создать и сохранить учетные данные с указанием типа учетной записи и пароля; сторонние приложения не должны запрашивать или хранить пароли для поставщиков удостоверений. Только собственный пароль приложения для текущего пользователя, который используется для входа в саму службу, должен храниться в учетных данных через API, и в этом случае не должен иметь установленный тип учетной записи.

В примере кода вопроса учетные данные типа Google используются для программного запуска процесса входа в Google (см. Вызов Auth.GoogleSignInApi.silentSignIn() и полный пример здесь), т.е. автоматически подписывать пользователя в с Google, как если бы они нажали кнопку входа в Google, поскольку у них были сохранены учетные данные с типом "Google".

В общем, также обратите внимание, что приложения могут получать учетные данные, которые были сохранены только из самого приложения (идентифицированного пакетом и подписью сертификата на Android) или в Chrome для проверенного и связанного веб-сайта (см. подробности). Это означает, что приложение может получать доступ только к данным, которые оно хранило от имени пользователя (возможно, на другом устройстве, идея состоит в том, что API Smart Lock облегчает получение данных аутентификации на разных устройствах), или к имени пользователя и паролю, которые пользователь ввел для связанный веб-сайт и решил сохранить с помощью Google через диспетчер паролей Chrome.

Пожалуйста, оставьте комментарий, если это ответ на ваш вопрос или вам нужна дополнительная информация!

person Steven    schedule 03.01.2016
comment
Я не смог найти никакой информации о том, как этот API защищен, поскольку это не аутентифицированный вызов API для воспроизведения сервисов. Вы упомянули, что пакет и подпись сертификата являются частью уравнения, но как предотвратить подделку приложений мобильными вредоносными программами или программным обеспечением на рутированном устройстве? Или кто-то просто вызывает конечную точку API напрямую и предоставляет общедоступные строки, которые вы ищете? Я предполагаю, что в этом есть что-то еще ... Чем отличается запрос сетевого API от приложения A от приложения B, который используется, чтобы приложение B не могло видеть сохраненные учетные данные приложения A? - person core24; 12.01.2016
comment
Глядя на HTTP-запросы, которые делает интеллектуальная блокировка, кажется, что все, что требуется для запроса учетных данных, это: * токен OAuth для учетной записи Google, в которой хранятся пароли (игровые сервисы получают один для вас автоматически) * идентификатор учетных данных string * строка URI приложения android: // Пока не ясно, откуда берется идентификатор учетных данных (как вызывающий абонент узнает, какие учетные данные хранятся для отображения для разрешения), чтобы узнать секрет. Также неясно, как создается значение url, также известное как signonRealm, чтобы узнать, предсказуемо ли оно. Можете ли вы пролить на них свет? - person core24; 14.01.2016
comment
Как я могу найти весь список доверенных устройств на моем телефоне с помощью вызова API Android? Возможно это вообще или нет. - person Pratik Patel; 06.09.2016