-
Notifications
You must be signed in to change notification settings - Fork 44
[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
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-tokens
instead 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-tokens
might be more intuitive because thedevice
is 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
.