Skip to main content

Tool to extract Google device local authentication tokens in Python

Project description

GitHub Workflow Status PyPI Downloads Pre-commit GitHub Activity

Google home local authentication token extraction

Python 3 package to extract google home devices local authentication tokens from google servers. These local authentication tokens are needed to control Google Home devices (See @rithvikvibhu's Google Home (2.0) API).

Please note: Once you have local google authentication tokens they only live about 1 day long. After that you will need to obtain new ones. You will probably need to run the script repeatedly storing the tokens somewhere convenient.

Quickstart

Note: the package was written and tested on Python 3.

  • Install the python package.

Using uv:

$ uv add glocaltokens

Using pip:

$ pip install glocaltokens

Use in your program as (see examples folder for detailed example):

from glocaltokens.client import GLocalAuthenticationTokens

# Using google username and password
#
# ONLY CALL THIS ONCE
#
# If you call this too often, google will disconnect your android devices and other weird things will happen
#
# Call get_google_devices_json() afterwards to get timers/alarms as oftens as you want to update.
client = GLocalAuthenticationTokens(
  username="<YOUR_GOOGLE_USERNAME>",
  password="<YOUR_GOOGLE_PASSWORD>"
)

# Get master token
print("[*] Master token", client.get_master_token())

# Get access token (lives 1 hour)
print("\n[*] Access token (lives 1 hour)", client.get_access_token())

# Get google device local authentication tokens (live about 1 day)
print("\n[*] Google devices local authentication tokens")
google_devices = client.get_google_devices_json()

# You can also select specific models to select when calling get_google_devices or get_google_devices_json with the models_list parameter.
# For example, we have pre-defined a constant with some Google Home Models (WARNING! Not all of them may be present)
# This could be used this way
from glocaltokens.const import GOOGLE_HOME_MODELS

google_devices_select = client.get_google_devices_json(GOOGLE_HOME_MODELS)

# But if you need to select just a set of models, or add new models, you can use a list of str
google_devices_select_2 = client.get_google_devices_json([
    f"Google Home",
    f"Google Home Mini",
    f"Google Nest Mini",
])

Predefined models list

There are some pre-defined models list in scanner.py, feel free to add new lists, or add models to a list with a pull-request.

GOOGLE_HOME_MODELS:

  • Google Home
  • Google Home Mini
  • Google Nest Mini
  • Lenovo Smart Clock

Security Recommendation

Never store the user's password nor username in plain text, if storage is necessary, generate a master token and store it. Example approach:

from glocaltokens.client import GLocalAuthenticationTokens

# Using google username and password first, and only once
client = GLocalAuthenticationTokens(
  username="<YOUR_GOOGLE_USERNAME>",
  password="<YOUR_GOOGLE_PASSWORD>"
)

# Get master token
master_token = client.get_master_token()
print("[*] Master token", master_token)

"""Now store master_token somewhere"""

Contributing

See Contributing guidelines. This is an open-source project and all countribution is highly welcomed.

Credits

Much credits go to @rithvikvibhu for doing most of the heavy work like finding a way to extract master and access tokens (See his gist here).

Also, thank you very much to the guys at pychromecast which provided the code required to scan devices in the network.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

glocaltokens-0.7.6.tar.gz (66.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

glocaltokens-0.7.6-py3-none-any.whl (14.1 kB view details)

Uploaded Python 3

File details

Details for the file glocaltokens-0.7.6.tar.gz.

File metadata

  • Download URL: glocaltokens-0.7.6.tar.gz
  • Upload date:
  • Size: 66.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.7.19

File hashes

Hashes for glocaltokens-0.7.6.tar.gz
Algorithm Hash digest
SHA256 36037f5f64846f9683143051e31fe4e3bca5e24f56c97efabc5a5a55f8243109
MD5 96c2099a977f00361429840f0f2d22a0
BLAKE2b-256 512c1039616ebdd45a310a89a0723a52bdd2aa699ecc5f620f87183e9575938c

See more details on using hashes here.

File details

Details for the file glocaltokens-0.7.6-py3-none-any.whl.

File metadata

File hashes

Hashes for glocaltokens-0.7.6-py3-none-any.whl
Algorithm Hash digest
SHA256 05ddb72ae3efe6651433a28a5087ac8e6a69e594fbecd565735cc587c57bc39c
MD5 cd2c853f1c8366064b97c7f11c94995c
BLAKE2b-256 c951e71eb1439ebf411df911539e02400d28bbb1907d7c5def157c904fc869f5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page