Поделиться через


Создание средства проверки подлинности SPNEGO для Microsoft Edge на Android

Третьи стороны могут включить проверку подлинности SPNEGO в Microsoft Edge для Android. Чтобы обеспечить эту проверку подлинности, необходимо предоставить средство проверки подлинности SPNEGO. В этой статье описывается интерфейс между Edge и SPNEGO Authenticator.

Введение

Средство проверки подлинности SPNEGO предоставляется службой Android. Средство проверки подлинности должно быть включено в приложение, предоставленное третьей стороной, установленное на устройстве пользователя. Приложение отвечает за управление учетными записями, используемыми для проверки подлинности SPNEGO, и за все взаимодействие с сервером SPNEGO.

Средство проверки подлинности SPNEGO — это учетная запись AndroidAuthenticator. Поэтому он должен соответствовать шаблону, описанному в abstractAccountAuthenticator. Он должен реализовывать класс аутентификатора, производный от AbstractAccountAuthenticator.

Средство проверки подлинности SPNEGO должно определить новый тип учетной записи. Имя типа учетной записи должно быть производным от доменного имени модуля записи (например, com.example.spnego). Тип учетной записи должен быть определен для использования customTokens и должен поддерживать функцию SPNEGO (HttpNegotiateConstants.SPNEGO_FEATURE).

Интерфейс к Microsoft Edge

Edge находит средство проверки подлинности SPNEGO через тип учетной записи Android, который он предоставляет. Тип учетной записи, определенный аутентификатором проверки подлинности, передается в Edge через политику AuthAndroidNegotiateAccountType .

Интерфейс для Edge осуществляется через платформу управления учетными записями Android, в частности через AbstractAccountManager.getAuthToken . Edge в org.chromium.net.HttpNegotiateConstants определяет еще несколько ключей и значений, которые используются в аргументах к getAuthToken, и в возвращенном пакете результатов.

Аргументы getAuthToken

При вызове метода getAuthToken имеет значение SPNEGO:HOSTBASED:<spn>, authTokenType где <spn> — это субъект запроса. Это всегда будет субъект на основе узла в текущей реализации. В будущих версиях могут быть разрешены другие типы субъектов, но в этом случае они используют другой префикс. Средства проверки подлинности SPNEGO должны проверить префикс.

Пакет options содержит следующие ключи:

  • KEY_CALLER_PID
  • KEY_CALLER_UID
  • HttpNegotiateConstants.KEY_CAN_DELEGATE — значение True, если делегирование разрешено, значение false, если не разрешено.

Если это второй или более поздний цикл последовательности многокруговой проверки подлинности, он также содержит следующие ключи.

  • HttpNegotiateConstants.KEY_INCOMING_AUTH_TOKEN — входящий маркер из заголовка WWW-Authenticate в кодировке Base64.
  • HttpNegotiateConstants.KEY_SPNEGO_CONTEXT — контекст SPNEGO, предоставленный аутентификатором в предыдущем раунде. Microsoft Edge обрабатывает этот пакет как непрозрачный объект и просто сохраняет его между раундами.

Пакет результатов getAuthToken

Окончательный пакет результатов getAuthToken (возвращается в качестве возвращаемого getAuthTokenзначения , или через AccountAuthenticatorResponse) должен содержать имя учетной записи, тип учетной записи и маркер, как определено в документации Android. Кроме того, пакет должен содержать следующие ключи:

  • HttpNegotiateConstants.KEY_SPNEGO_RESULT — код результата SPNEGO. Это должно быть одно из значений, определенных в httpNegotiateConstants.
  • HttpNegotiateConstants.KEY_SPNEGO_CONTEXT — контекст, возвращаемый в средство проверки подлинности в следующем раунде проверки подлинности. Это необходимо, только если проверка подлинности не завершена.

Рекомендации по реализации

При реализации средства проверки подлинности SPNEGO следует учитывать следующие рекомендации.

  • Каждая учетная запись, предоставляемая средством проверки подлинности учетной записи SPNEGO, должна соответствовать одному субъекту-пользователю (учетной записи), предоставляемой одним центром распространения ключей.

  • Средство проверки подлинности учетных записей не должно хранить пароли. Вместо этого он должен хранить TGT для субъектов-пользователей и требовать от пользователей повторного ввода паролей (или других данных проверки подлинности) по истечении срока действия TGT.

  • Средство проверки подлинности учетных записей должно хранить список авторизованных приложений (или подписей приложений) для каждой учетной записи и отказываться предоставлять маркеры службы другим приложениям. Список авторизованных приложений может быть следующим:

    • Встроенный в средство проверки подлинности учетных записей.
    • Настраивается системным администратором.
    • Настраивается пользователем. В этом случае средство проверки подлинности учетных записей может разрешить пользователю динамически авторизовать новые приложения при первом запросе доступа.

    Средство проверки подлинности может получить пользовательский интерфейс вызывающего приложения с помощью поля KEY_CALLER_UID пакета параметров, а затем определить запрашивающее приложение с помощью context.getPackageManager().getNameForUid() или аналогичного вызова.

    Это необходимо для того, чтобы вредоносные приложения, выполняемые пользователем, не могли использовать учетные данные пользователя для доступа к службам непреднамеренным способом. Это важно, так как использование параметра пользовательских маркеров (как описано ранее) отключает собственную проверку подписи Android при получении маркеров проверки подлинности.

  • Если он не встроен в средство проверки подлинности учетных записей, системный администратор или пользователь должны иметь возможность настроить расположение центра распространения ключей.

Коды ошибок, отображаемые в Microsoft Edge

Помимо кодов ошибок, которые можно пересылать из приложения authenticator, при попытке проверки подлинности запроса могут отображаться следующие ошибки:

  • ERR_MISSING_AUTH_CREDENTIALS. Сведения об учетной записи недоступны для использования. Его можно вызвать по любой из следующих причин.
    • Пользователь не вшёл в приложение authenticator и не найдена доступная учетная запись.
    • Невозможно получить сведения об учетной записи, так как текущее приложение не имеет необходимых разрешений.
    • Существует несколько подходящих учетных записей, и мы не можем получить выбор от пользователя.
  • ERR_UNEXPECTED: произошла непредвиденная ошибка, и запрос был завершен.
  • ERR_MISCONFIGURED_AUTH_ENVIRONMENT. Проверка подлинности не может быть выполнена из-за некоторых проблем в конфигурации приложения. Некоторые разрешения могут отсутствовать.

Используйте Logcat для поиска тега cr_net_auth в системном журнале, чтобы получить дополнительные сведения о причинах этих ошибок.

Использование средства проверки подлинности в Microsoft Edge

Edge использует несколько политик для управления использованием проверки подлинности SPNEGO. Чтобы включить проверку подлинности SPNEGO, необходимо настроить AuthServerAllowList , а authAndroidNegotiateAccountType должен соответствовать типу учетной записи, предоставленной аутентификатором SPNEGO.

Лицензия на содержимое

Примечание.

Некоторые части этой страницы представляют собой измененные материалы, созданные и предоставленные на сайте Chromium.org. Их использование регулируется условиями, описанными в лицензии Creative Commons Attribution 4.0 International License. Исходная страница Chromium находится здесь.

Creative Commons License
Эта работа предоставляется в рамках международной лицензии Creative Commons Attribution 4.0 International License.

См. также