From a1c5a46d86225b76dd85a4ee67b5148fd0bbc330 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 1 Jul 2018 23:10:23 -0400 Subject: [PATCH] Add blog post about trying auth --- docs/auth_api.md | 5 +- website/blog/2018-07-02-trying-new-auth.md | 51 ++++++++++++++++++ .../en/blog/2018-07-experimental-auth/cli.png | Bin 0 -> 37782 bytes 3 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 website/blog/2018-07-02-trying-new-auth.md create mode 100644 website/static/img/en/blog/2018-07-experimental-auth/cli.png diff --git a/docs/auth_api.md b/docs/auth_api.md index cc68b261..21b3bbd6 100644 --- a/docs/auth_api.md +++ b/docs/auth_api.md @@ -12,10 +12,9 @@ This page will describe the steps required to fetch an access token for a user a A client needs to be created inside Home Assistant before a client can request users to authorize it or fetch a new access token. The only way currently to create a client is programmatically: ```python -client = await hass.auth.async_create_client( +client = await hass.auth.async_get_or_create_client( 'Example client', - redirect_uris=['http://www.example.com/hass_callback'], - no_secret=True, + redirect_uris=['http://www.example.com/hass_callback'] ) print(client.id) ``` diff --git a/website/blog/2018-07-02-trying-new-auth.md b/website/blog/2018-07-02-trying-new-auth.md new file mode 100644 index 00000000..b783ea7b --- /dev/null +++ b/website/blog/2018-07-02-trying-new-auth.md @@ -0,0 +1,51 @@ +--- +author: Paulus Schoutsen +authorURL: https://twitter.com/balloob +authorFBID: 297400035 +title: Trying the new auth system +--- + +In Home Assistant 0.69 we introduced the foundation for a new [authentication API](auth_index.md). We're switching from a single hardcoded API password to a refresh/access token based authentication system (powered by OAuth2). + +For Home Assistant 0.73, I've sprinted together with [@awarecan] to ensure that we have reached a minimum viable product of the auth system: + + - Users can be managed via a built-in command line script. + - The frontend will ask for username and password to login + - If you opt-in for the new system, the API password will no longer work. + - To not force a hard break with the ecosystem around Home Assistant, a temporary legacy mode has been added to turn API password support back on. This will be removed in the future. + +The system is not yet ready for mainstream consumption, we still need to add Hass.io support and a user interface to help guiding the user to create their first user account and to manage users. You can follow (and join!) the work to be done [here](https://github.com/home-assistant/home-assistant/issues?q=is%3Aissue+is%3Aopen+label%3Aauth). + +If you're interested in trying it out, keep on reading. + + + +## Trying it out + +> If you are using Hass.io, you must enable legacy API password support. + +This requires you to be running Home Assistant 0.73 beta or a later version. + +First step will be to configure an auth provider. We are going to configure the built-in `homeassistant` auth provider. This provider will be the default one and stores users securely in the config directory. + +```yaml +# Example configuration.yaml entry +homeassistant: + auth_providers: + - type: homeassistant + # Uncomment next line if you want to enable legacy API password support + # - type: legacy_api_password + +# Enable the auth component +auth: +``` + +Next step is to create users. Open a terminal and navigate to your Home Assistant installation. The script for managing users is built into Home Assistant and can be invoked using `hass --script auth --config /path/to/config`. + +![Screenshot showing the help output of the auth script](/img/en/blog/2018-07-experimental-auth/cli.png) + +If you restart Home Assistant and navigate to the frontend, you'll be prompted with a new login screen. If you enabled both auth providers, you will first have to pick which auth provider to use for authentication. + +Once logged in, the frontend will store the access and a refresh token. The access token expires every 30 minutes and whenever Home Assistant restarts. The fronend will automatically fetch a new access token using the stored refresh token. We're using the OAuth2 standard for this. [More info in the docs](auth_api.md). + +[@awarecan]: https://github.com/awarecan diff --git a/website/static/img/en/blog/2018-07-experimental-auth/cli.png b/website/static/img/en/blog/2018-07-experimental-auth/cli.png new file mode 100644 index 0000000000000000000000000000000000000000..4b586b8a7960e49932d673573315b269d4d5a55b GIT binary patch literal 37782 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 Ee*u(W&Hw-a literal 0 HcmV?d00001