-
Notifications
You must be signed in to change notification settings - Fork 63
[3/n] /v1/me/access-tokens list and delete
#8227
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
Conversation
| } | ||
|
|
||
| Ok(()) | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a hard delete — might want to put that in the name, since it's unusual. We do that in the session delete method. If we wanted a soft delete, we could set time_expires to now instead. That feels kind of bad to me, but so does hard delete.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the hard delete is fine, setting time_expires feels kind of worse especially with regards to errors when that token is used. Adding hard_delete to the name is fine with me, if you think that's important.
0cd9b5a to
214811b
Compare
| // typical authz check, instead effectively encoding the policy here that | ||
| // any user is allowed to list and delete their own tokens. When we add the | ||
| // ability for silo admins to list and delete tokens from any user, we will | ||
| // have to model these permissions properly in the polar policy. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is important. We hack around the harder authz problem of modeling token properly by restricting these functions to the current actor (for now).
/v1/me/tokens list and delete /v1/me/device-tokens list and delete
f18022c to
6811931
Compare
f68b227 to
3c36e26
Compare
6811931 to
1467bfd
Compare
3c36e26 to
26d25ab
Compare
1467bfd to
3e15398
Compare
66254ea to
9e014d0
Compare
d2fc15e to
14c544c
Compare
9e014d0 to
6772411
Compare
/v1/me/device-tokens list and delete /v1/me/access-tokens list and delete
6772411 to
7fa6757
Compare
Closes #8139. Token IDs are used in #8227 and #8231 for token CRUD. WIP. Everything compiles and existing tests work, but we are not yet testing retrieval by ID and we need to think about authz checks on the datastore functions for retrieving tokens and sessions by token string. This PR would be a lot shorter if not for the fact that the `token` column was the primary key on both tables, so adding the `id` requires a bunch of migration steps to change the primary key. There were also a lot of changes to code and tests around making things ID-centric instead of token-centric. * [x] SQL migrations for adding `id` col and changing primary key to that * [x] Add `TypedUuid` to session and token DB models * [x] Update `authz_resource!` and `lookup_resource!` calls for new primary key * [x] Update `Session` trait methods to use `id` instead of `token` * [x] Update app and datastore session and token methods to use ID instead of token * [x] Update two distinct but nearly identical `FakeSession` implementations (one for unit tests, one for integration tests) to a) track sessions in a `Vec` instead of a `HashMap` with token keys * [x] Figure out authz situation in new fetch session/token by token string methods
7fa6757 to
fd19e2d
Compare
14c544c to
4dd9321
Compare
hawkw
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this one is pretty straightforwards, no big concerns from me!
| current_user_access_token_delete DELETE /v1/me/access-tokens/{token_id} | ||
| current_user_access_token_list GET /v1/me/access-tokens |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think I'm in favor of putting this under /v1/me, personally!
| } | ||
|
|
||
| Ok(()) | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the hard delete is fine, setting time_expires feels kind of worse especially with regards to errors when that token is used. Adding hard_delete to the name is fine with me, if you think that's important.
fd19e2d to
ab6ec2b
Compare
ab6ec2b to
bbcc90d
Compare
Closes #8147. Built on #8137, #8214, and #8227. This is pretty straightforward, I think. The user gives us a TTL in seconds at token request time. We store it on the request row. When they come back in the later step to confirm the code and generate the token, we retrieve the TTL, validate that it is less than the silo max (if one is set), and we use it to generate the `time_expires` timestamp, which cannot be changed later. One slightly surprising bit is that we can't validate the TTL against the silo max at initial request time because we don't have any idea what silo the user is associated with until the confirm step. So probably want to make sure we are handling TTL validation errors nicely in the web console, because I think that's where they will show up.
Built on top of #8137 and #8214.
This is only for a user to list and delete their own tokens. It doesn't quite match RFD 570, which says
/v1/device-tokensinstead of/v1/me/access-tokens, but it feels good under/v1/me, and after trying to make the UI too, I think "access tokens" is much more intuitive. If I stick with this, I will update RFD 570 to match.I'm not sure about the pathWent with/v1/device-tokens— in the API we call themDevice Access Tokens. I think/v1/access-tokensmight be more intuitive because thedeviceis sort of an implementation detail, it refers to the OAuth device auth flow, which we are using. In practice, the user just gets a token with the CLI and pastes a code into the web UI and they don't have to think too much about it, so exposing that detail in the name might not be worth it./v1/me/access-tokens.