Skip to content

Headless Login: tsh implementation#22751

Merged
Joerger merged 3 commits intomasterfrom
joerger/headless-authn-tsh
Mar 15, 2023
Merged

Headless Login: tsh implementation#22751
Joerger merged 3 commits intomasterfrom
joerger/headless-authn-tsh

Conversation

@Joerger
Copy link
Copy Markdown
Contributor

@Joerger Joerger commented Mar 7, 2023

This PR adds the tsh implementation for Headless Login.

Manual testing:

@Joerger Joerger changed the title Headless Login: tsh --headless Headless Login: tsh implementation Mar 7, 2023
@Joerger Joerger force-pushed the joerger/headless-authn-proxy-endpoint branch from 5cd7266 to c049968 Compare March 7, 2023 23:31
@Joerger Joerger force-pushed the joerger/headless-authn-tsh branch 3 times, most recently from 1cef12e to 649c44a Compare March 8, 2023 01:21
Base automatically changed from joerger/headless-authn-proxy-endpoint to master March 10, 2023 20:32
@Joerger Joerger force-pushed the joerger/headless-authn-tsh branch from 649c44a to e251da3 Compare March 14, 2023 00:04
@Joerger Joerger marked this pull request as ready for review March 14, 2023 00:04
@github-actions github-actions Bot added size/md tsh tsh - Teleport's command line tool for logging into nodes running Teleport. labels Mar 14, 2023
@github-actions github-actions Bot requested review from AntonAM and r0mant March 14, 2023 00:04
@Joerger Joerger requested a review from jakule March 14, 2023 00:11
Comment thread tool/tsh/tsh.go Outdated
Comment thread api/types/headlessauthn.go Outdated
@jakule
Copy link
Copy Markdown
Contributor

jakule commented Mar 15, 2023

@AntonAM @r0mant Friendly ping

Comment thread tool/tsh/tsh.go Outdated
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will the corresponding "decline" command be needed as well?

Copy link
Copy Markdown
Contributor Author

@Joerger Joerger Mar 15, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you enter "N" in the "y/N" prompt, it will count as a decline. I suppose "approve" is a bit misleading in that respect, but declining is more of an after thought as users usually won't need to go out of their way to decline a request. In the WebUI, we also use the "cancel" button for decline.

Comment thread lib/client/api.go Outdated
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this default to other auth method, or fail if headless auth was requested but not supported?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I currently have it set up to default to other auth methods. The primary use case for this is so that you can set cluster_auth_preference.connector = headless and it will still default to local connector when headless is not applicable.

< local machine > $ tsh login ... 
# logs in with local authentication method
...

< remote machine > $ tsh ssh ...
# initiates headless
tsh approve request-id
...

< local machine > tsh approve request-id
# Uses local authenticaiton (~/.tsh) to approve

@Joerger Joerger force-pushed the joerger/headless-authn-tsh branch from d707fc2 to 804d728 Compare March 15, 2023 17:50
@public-teleport-github-review-bot public-teleport-github-review-bot Bot removed the request for review from AntonAM March 15, 2023 17:50
@Joerger
Copy link
Copy Markdown
Contributor Author

Joerger commented Mar 15, 2023

@r0mant I'm going to go ahead and merge since you approved. Let me know if you disagree with my comments above and I'll make a follow up PR.

@Joerger Joerger enabled auto-merge March 15, 2023 17:52
@Joerger Joerger added this pull request to the merge queue Mar 15, 2023
Merged via the queue into master with commit 4753882 Mar 15, 2023
@Joerger Joerger deleted the joerger/headless-authn-tsh branch March 15, 2023 20:27
Joerger added a commit that referenced this pull request Mar 20, 2023
* * Implement tsh --headless

 * Implement tsh headless approve

* Add better headless authn state handling.

* Add godoc for new tsh field.
@Joerger Joerger mentioned this pull request Mar 20, 2023
18 tasks
Joerger added a commit that referenced this pull request Apr 3, 2023
* RFD 105 - Headless Authentication (#21005)

* Draft UX section.

* Complete draft.

* Minor edits.

* Address comments, polish.

* Condense headless login request into a single HTTP endpoint.

* Update security section for limited certificate permissions.

* Address doyensec comments.

* Update RFD.

* Remove certificate limitation from RFD scope; Add RFD number; smaller
edits.

* Small fixes.

* * Update auth flow to use auth.AuthenticateSSHUser endpoint instead of CreateHeadlessAuthRequest and GenerateUserCerts endpoints

 * Remove CreateHeadlessAuthRequest rpc

 * Remove token and other unneeded fields from headless authentication

* * Add resource watcher section

* Don't insert backend data without authenticaion

* Remove view headless requests page

* Update diagram

* Use the client's public key to derive a request ID.

* Add HeadlessAuthentication protobuf type and Resource implementation. (#22350)

* Add headless auth preference logic. (#22148)

* Add Headless Authn backend service. (#22553)

* Headless Login: add headless authentication resource watcher (#22699)

* Add headless authentication resource watcher.

* Handle OpInit event and Watcher errors.

* Headless Login: proxy server changes (#22734)

* * Add proper context handling to auth.AuthenticateUser.

 * Move PublicKey field to AuthenticateUserRequest where it can be used
   for actual authentication.

 * Use a simple switch statement in /webapi/ssh/certs logic to switch
   between password, otp, and eventually headless login.

* Add Headless flow to /webapi/ssh/certs login enpdoint.

* Add 3 minute callback timeout.

* Headless Login: protobuf service (#22750)

* Add Headless Authn proto server.

* Add Headless Authn proto client.

* Resolve comments.

* Headless Login: tsh implementation (#22751)

* * Implement tsh --headless

 * Implement tsh headless approve

* Add better headless authn state handling.

* Add godoc for new tsh field.

* Headless login: Mlockall (#23159)

* Use Mlockall for Headless login.

* Skip memory lock on unsupported OSs.

Resolve comments

* Headless Login: auth server changes (#22726)

* Add Headless Authn service.

* Add/fix 3 minute headless login timeout.

* * Prevent repeated updates to headless authentication state

* Prevent user lock out from headless authentication failure

* Delete headless authentication on failed attempts

* Add auth_with_roles test.

* Extend timeout in test to reduce flakiness.

* Fix error typo.

* Add context timeouts, remove initial GetHeadlessAuthentication call.

* Resolve comments.

* Move http client to it's own file; Add ability to clone HTTP client for per-request configuration changes.

* Fix flaky test.

* Remove shared state from test.

* Update error handling and testing for auth_with_roles.

* Fix rebase misshap.

* Fix race condition in test.

* update e ref

* Fix ctx missing.

* Extend test timeout to prevent flakiness.

* Fix issue with roundtrip.ClientParams not being applied due to roundtripper wrapping.

---------

Co-authored-by: Tim Ross <tim.ross@goteleport.com>

* Extend context timeouts in TestHeadlessAuthenticationWatcher tests to reduce flakiness. (#23160)

* Fix flaky test due to context deadline. (#23260)

* Fix headless login with `second_factor: on | optional` (#23271)

* Fix headless login with second_factor:on|optional.

* Update ssh/certs endpoint to only configure necessary authentication fields; clarify comments; update test to cover headless authenticaiton preference.

* Update test to cover user locking logic.

* Change generic headless error. (#23331)

* Headless SSO web endpoint and UI (#22914)

* Update UI

Update UI text

Update the code to add headless request get

Remove commented code

Added simple UI and endpoints

* Update UI
Implement reject SSO handler and UI

* Fix linter issues

* Fix more linter issues

* Fix UI tests

* Use url.JoinPath.

* center spinner on the page and animate it.

* Address code review comments

* Address code review comments

* Renamed React component

* Address PR comments

---------

Co-authored-by: joerger <bjoerger@goteleport.com>
Co-authored-by: Jeff Pihach <jeff.pihach@goteleport.com>

* Fix flaky test `TestHeadlessAuthenticationWatcher` (#23417)

* Fix race condition in test by using a helper function instead of complex channel mechanisms.

* Avoid creating new methods solely for testing; resolve other comments.

* Reuse more code; resolve other comments.

* Fix race condition that could cause a new watcher to be marked as stale before the channel is consumed; Fix minor test issues.

* Remove race condition on headless authentication expires field when (#23578)

using memory storage.

* Headless Authn: documentation (#23272)

* Add docs.

* Update docs/pages/access-controls/guides/headless-login.mdx

Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>

* Fix lint error.

* Ellaborate on how headless login differs from standard login.

* Resolve comments; Fix capitalization.

* Resolves comments.

* Add cli reference docs.

* Restructure guide; Remove scoped blocks; Update descriptions; resolve other comments.

* Make configuration options/alternatives collapsible; Fix typos.

* Fix file names, titles, and make new config details begin as closed.

* Fix hidden merge conflict.

* Add line breaks.

* Fix dead link.

---------

Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>

---------

Co-authored-by: Tim Ross <tim.ross@goteleport.com>
Co-authored-by: Jakub Nyckowski <jakub.nyckowski@goteleport.com>
Co-authored-by: Jeff Pihach <jeff.pihach@goteleport.com>
Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/md tsh tsh - Teleport's command line tool for logging into nodes running Teleport.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants