Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Config UI: Add authentication #11732

Merged
merged 42 commits into from
Apr 3, 2024
Merged

Config UI: Add authentication #11732

merged 42 commits into from
Apr 3, 2024

Conversation

naltatis
Copy link
Member

@naltatis naltatis commented Jan 17, 2024

Add password authentication to secure sensitive configuration data. Limited scope to one "admin" user.

  • 🔐 admin password can be set via api once(!)
  • 🎟️ using JWT tokens via httpOnly cookie (90d validity)
  • 🔮 using bcrypt to store encrypted admin pw hash in db

addresses #6029

TODOs

  • login UI
  • pw reset via CLI -> evcc password [set|reset]
  • secure all /config routes
  • e2e test: login, existing flow
  • e2e test: set password, logout
  • move auth from site to global
  • pw change function

Ideas for some time in the future

  • Option to require auth for all evcc UI/APIs
  • Support for multiple users or integration tokens

Video

auth.mp4

@naltatis naltatis added enhancement New feature or request infrastructure Basic functionality labels Jan 17, 2024
@naltatis naltatis requested a review from andig January 17, 2024 10:40
@naltatis naltatis mentioned this pull request Jan 17, 2024
22 tasks
@VolkerK62
Copy link
Contributor

ist das dann Zwang, oder geht es auch ohne?

@naltatis
Copy link
Member Author

Für alles, was Config-UI ist, würde ich das als "Pflicht" sehen. Das offen im Netzwerk stehen zu haben (auch im eigenen) ist keine gute Idee. Da wird ja später auch so etwas wie Scripting/Plugins drüber möglich sein.

@VolkerK62
Copy link
Contributor

Ah, also nur, wenn die Config betroffen ist. Nicht beim normalen Zugriff aufs UI.

@naltatis naltatis mentioned this pull request Jan 17, 2024
7 tasks
@andig
Copy link
Member

andig commented Jan 18, 2024

admin password can be set via api once(!)

I don't think thats a good idea. First user could run any script. We should either do this during

evcc configure

or/plus add a cli command.

server/db/settings/setting.go Show resolved Hide resolved
core/auth/auth.go Outdated Show resolved Hide resolved
core/auth/auth.go Outdated Show resolved Hide resolved
core/auth/auth.go Outdated Show resolved Hide resolved
core/auth/auth_test.go Outdated Show resolved Hide resolved
@naltatis
Copy link
Member Author

I don't think thats a good idea. First user could run any script. We should either do this during
evcc configure

Ja, wir müssen noch über den Flow sprechen, wie das initiale Setzen des Passworts passiert. Vmtl. müssen wir das bei der Einrichtung durch die UI erzwingen. Das Passwort in die Umgebungsvariable oder evcc.yaml (via evcc configure) zu schreiben ist keine Lösung. Unser Ziel ist es ja eine 100% via Webbrowser-Einrichtung zu ermöglichen.

@AnBo83
Copy link

AnBo83 commented Feb 14, 2024

Moin, da immer mehr über die UI zu konfigurieren ist wird dieses Thema immer aktueller. Da sich seit einem Monat nichts getan hat wollte ich mal vorsichtig nachfragen wie weit die Implementierung ist?

@naltatis
Copy link
Member Author

Ongoing. Mehrere Baustellen, die hier zusammenführen.

@andig
Copy link
Member

andig commented Feb 14, 2024

Die Rückfragen halten uns offen gesagt nur von der Arbeit ab. Wenn sich etwas tut wird es hier sichtbar...

server/http_auth.go Outdated Show resolved Hide resolved
@naltatis
Copy link
Member Author

Mandatory "Set Password" Modal (wip)

matching

empty

@naltatis
Copy link
Member Author

Set initial password flow.

set.password.mp4

cmd/password_reset.go Outdated Show resolved Hide resolved
cmd/password_set.go Outdated Show resolved Hide resolved
core/auth/auth.go Outdated Show resolved Hide resolved
core/auth/auth.go Outdated Show resolved Hide resolved
core/auth/auth.go Outdated Show resolved Hide resolved
server/http_auth.go Show resolved Hide resolved
server/http_auth.go Outdated Show resolved Hide resolved
server/http_auth.go Outdated Show resolved Hide resolved
server/http_auth.go Outdated Show resolved Hide resolved
server/http_auth.go Outdated Show resolved Hide resolved
@andig
Copy link
Member

andig commented Mar 26, 2024

Schick, ich hab nur Kleinigkeiten.

@naltatis naltatis added needs documentation Triggers issue creation in evcc-io/docs and removed needs documentation Triggers issue creation in evcc-io/docs labels Apr 2, 2024
@naltatis
Copy link
Member Author

naltatis commented Apr 3, 2024

@andig Ich hab jetzt erstmal alle UI relevanten Stellen (Passwort anlegen/aktualisieren, Login) abgeklemmt. Damit können wir diesen PR in den Master mergen. Auch die entsprechenden Tests sind erstmal geskippt. Alle Stellen sind mit einem entsprechenden TODO versehen (... once auth is released).

Zusammen mit dem ersten echten Use-Case (#11739) würden wir das Feature dann komplett aktivieren.

Einzige offene Frage: jetzt rein oder kurz nach dem nächsten Release?

@naltatis naltatis merged commit dc13701 into master Apr 3, 2024
6 checks passed
@naltatis naltatis deleted the feature/auth branch April 3, 2024 19:17
@StevieC121176
Copy link

eine Frage, ist dieses Feature schon aktiviert da schon im Master?

@naltatis
Copy link
Member Author

naltatis commented Apr 5, 2024

Das Feature ist im Master aber aktuell noch Code-seitig auskommentiert. Wir werden es vmtl. zusammen mit dem YAML Editor aktiv schalten.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request infrastructure Basic functionality needs documentation Triggers issue creation in evcc-io/docs prio Priority
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants