-
Notifications
You must be signed in to change notification settings - Fork 44
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
Attenuated app authorization #73
Comments
@Mitzi-Laszlo can you add this to https://github.com/solid/specification/milestone/1? |
We also discussed this in the community call just now and there seemed to be unanimous consensus that this is something we want and need to be in scope. |
Copying over from #38 (comment):basically it's https://forum.solidproject.org/t/read-only-or-sub-folder-oidc-scopes/767 and https://github.com/solid/authorization-and-access-control-panel - in a sentence, and at the minimal level: If Alice gives Bob read-access to (a part of) her pod, then how can Bob give a document-viewer app "attenuated" access to only one resource on there, but not the others. In theory this is already possible: Bob emails Alice the origin of the app and which doc it should be allowed to open, and Alice goes and edits the ACL with an acl:origin entry, then emails Bob back. But in practice we (obviously) want a better system for this. |
It's up to the editors of the spec to assign issues to milestones. My concern with assigning it to https://github.com/solid/specification/milestone/1 is that there are too many dependencies that need to be worked out first. I don't see how we will get there on time. Let's map out the dependencies and make explicit issues for them; that will bring clarity. |
We'd need to spec several pre-requisites to make this happen. (And I'm happy to break these out into individual issues, where appropriate, if people agree on the general list.) Most, if not all, of this spec work will probably need to happen in the Authorization and Access Control Panel.
Hopefully this can help shape the discussion of this spec feature request. |
Just to be clear, though, that while I agree with @RubenVerborgh that we may not have time to address all dependencies 1-6, in time for the a 1.0 spec, I personally think that it's crucial that we address items 1 through 3 for the 1.0 spec. |
Great! I'll leave this task in your (plural) capable hands. :) |
I agree that this issue wouldn't quite make it into milestone 1 (~FPWD). I've bumped it down for later. If all dependencies in the earlier milestones are addressed, we can do it - which may end up getting done for ~PR/REC or major release ("1.0") any way. |
If any issue pertaining to items 1-3 are not logged, can you mind adding them? |
Also discussed this issue with @jaxoncreed just now. Our conclusion is that regardless of where the dialog GUI lives where Bob specifies his choice of attenuation, there are basically two places where the attenuation decision can go: on Bob's profile/pod, or inside the bearer token. Another interesting question is: Does Bob trust Alice's storage server to properly apply Bob's attenuation decision? If not, then I think the only other option would be if Bob makes the app go through a proxy that he controls. |
Some more discussion on this solid/authorization-panel#43 |
So https://github.com/solid/authorization-and-access-control-panel/blob/master/privilege-request-protocol.md doesn't solve the Alice+Bob scenarios I described in this issue, because it just sort of assumes that Bob is somehow able to tell Alice's server what his attenuation decision is, and we don't currently have a way to do that, other than sending an email to Alice and she editing the ACL doc at the RDF level. |
I've created issue for something like that a month ago: solid/authorization-panel#35
Why in that case Bob would trust Alice's storage server to even properly apply user related WAC rules? |
Good question, and I don't know the answer! :) I did see that this is now planned for 19 June 2020. Later than I had hoped, but glad to see it's on your roadmap! |
I think that Bob trusting Alice's storage server to enforce the constraints he's applied on his token is fine.
|
since the decision of whether to grant access to any request ultimately belongs to, and is enforced by, Alice's server, such an "attenuation decision" could also be stored in Alice's server.
expecting Alice's (or anyone else's) storage server to enforce Bob's constraint preferences is, in the best case, "overly optimistic". Bob can hope unassociated servers he accesses will honor his preferences, but he should only expect it from servers he controls or otherwise knowingly trusts to do so. |
The case of 6. Delegate-able Attenuated Access Control for Apps is natural case, when one want to use particular apps to access resources that they have access to. And it is most deployed case of oauth systems for most production apis like google-(drive/sheets/...), twitter, fb apps. The case allows to use what ever app one want to use, and limit their capabilities to certain 'scopes'. Say, if one want to just analyse a google sheet, they authorizes an app with gsheets:read scope. Then the access token can only be used for that purpose by app. This type of functionality is the one most users are accustomed to. But in above cases, the resource servers are tied to particular client-authorization-endpoint, and both shares meaning of scopes. The solution can be to specify certain syntax for attenuated primitive scopes, Which solid storages and oauth-authorization-endpints share. Say, An access token bound to a scope string of |
It may be clear and fruitful to separate the authorization issue into two orthogonal axes.
And most of cases discussed will be permutations and combinations along these two axes. And this distinction is natural. 1. Authorization for access (to any agent)This only deals with which web-ids have access to which operations on which resources. 2. Authorization for delegation (to oauth-clients)Without delegation, In normal case, agents should be able to directly access resources they have access to without need of any client. This is possible by mechanism of But when one want to access resources through custom clients, then this mechanism of authorizing-to-act-on-behalf-of a.k.a delegation comes into play. In this case an access-token represents the complete delegation contract between user, ouath-provider, third-party-app with all it's nuances of delegation-scope limiting, contract-validity-periiod, etc. . And resource servers have to acknowledge the contract. As OAuth providers and pod-servers have no prior mutual knowledge, the scope strings cannot be constant strings, but string in solid-specified-syntax, to limit to certain resources, to certain operations. This is natural, allowed from oauth spec. |
@damooo have you taken a look at https://solid.github.io/data-interoperability-panel/specification/#delegated-data-grant We also have an open issue for generalized delegation solid/data-interoperability-panel#222 |
See #38 (comment)
The text was updated successfully, but these errors were encountered: