-
Notifications
You must be signed in to change notification settings - Fork 20
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
ACP Draft design flaw #277
Comments
https://solid.github.io/authorization-panel/acp-specification/#access-control-resource
Could you provide an example of ACR that includes policies over the resource, which ACR is auxiliary of, and policies over itself? Especially what would be referenced with |
@elf-pavlik I think you're pointing out an interesting ambiguity/potential inconsistency. The I think such inverse properties could hold for each of the ACP elements, that is: To respond more directly to your question:
|
I am fine with removing |
If the The schema allowing us to have:
And inverse:
Is much cleaner/intuitive/consistent/easy to describe and understand. I do get your point about existing clients and servers, but there will be no moment in the future where such change will be even remotely possible or acceptable. I am very willing to make the effort right now for the sake of consistency and coherence. |
I really don't like If you have Alternative would be removing |
If the I think we need to have a crystal clear map of which modes entail which operations in the Solid Protocol. And that is not ACP specific. Now, when it comes to ACP, there is no reason for ACP to have two ways of determining access to resources documented within the specification. So if we want to have ACRs on ACRs in Solid, we should have that properly discussed and there is nothing in the ACP data model that technically stops you from writing
The range is an inference property, so it would not have "any" in range. I don't know where you're going really with such a predicate. What you're describing is: The chain is:
Note that access control resources, access controls, policies and matchers are resources (maybe the name access control resource is also confusing and access control list would be better and less inducing of the wrong idea that "resource" stands for a document). All of the nodes in an ACP authorization graph could be document or non-document resources, as per Cool URIs; it is not up to ACP to determine that. |
As I understand, the change you propose would not allow using common
That means that in ACR polices can be set just on a single resource which links to that ACR.
It doesn't seem that ACR can reference itself to include policies on itself ex:res1 acp:accessControlResource ex:acr1 .
ex:acr1 acp:accessControlResource ex:acr1 . With above it would not be possible to set different policies on |
What you are highlighting here is not meant to be valid because one of the restrictions of ACP which I am not propsing to remove here is that one access control resource has one resource. Therefore in the graph you propose:
The RDFS Resources However, there is nothing, even in the current situation, making the following graph problematic:
If we did remove So in any case, there is nothing really preventing from expressing the second graph which would allow using
ACP helps you define authorization graphs and match them against request descriptions to determine access modes granted. Solid or any other protocol deciding to implement and use ACP can use those interfaces: Feed context graph; get back an access grant graph. Solid on the other hand defines the details of interacting with HTTP addressable resources. It is up to Solid to define the details of how authorization auxiliary resources are discovered and which access modes entail which Solid operations. If there is a requirement for There are a number of discussions about which access modes are actually required by Solid and we should not bypass those:
|
Even if |
This is actually quite an important point, which we already bumped into on a number of projects. The ability for a data owner (or other high-control user) to grant another user partial control access is a huge desirable. So, while I agree with a lot of what @matthieubosquet points out (orthogonality of Solid and ACP, current vocabulary being confusing ...), we should take care that if a switch is made to a single predicate, it is accompanied by another way to achieve this. Constructs like |
Could you expand on what mean by that woutermont? |
I like the simplification. |
@matthieubosquet, after reading the panel minutes of yesterday, I feel like not everyone is aligned on the meaning of So, given, a resource
(Note that these are all different access control modes for Given that the "control modes" will always run parallel to the "base access modes" (this is the orthogonality), it is semantically weird to have define them separately (e.g. Long story short: I agree with your intuition about the design flaw (ACRs are just resources), but I would redefine |
@woutermont my proposal is not about the nature of the ACP is a data model that is here to describe the conditions of access to a resource. As I have described in another comment already, the Let us have an example Solid resource ex:SolidResourceA acp:accessControlResource ex:SolidAuxiliaryACPAuthorizationResourceB .
ex:SolidAuxiliaryACPAuthorizationResourceB acp:accessControl ex:ac1 .
ex:ac1 acp:policy ex:p1 .
ex:p1
acp:allow acl:Read, acl:Write ;
acp:anyOf ex:resourceAdminMatcher .
ex:resourceAdminMatcher
acp:agent ex:bob, ex:alice .
# And also:
ex:SolidAuxiliaryACPAuthorizationResourceB acp:accessControlResource ex:acr1 .
ex:acr1 acp:accessControl ex:ac1 . ACP would understand the above graph as controling access to both the resource and its auxiliary authz resource via the access control Whether the Solid Protocol accepts that the The |
@matthieubosquet, this is one of those issues where we both agree on the observation, but will keep talking in circles about the conclusion. So, even though I believe it to be a lot more efficient to tackle them together, I'll continue my point in another issue. Apologies for the inconvenience! |
I'm planning to submit soon my proposal for delegation, I believe this will provide a more elegant way of sharing access and only require the storage owner to update any ACR in the storage, more precisely their Authorization Server would do it on their behalf - solid/solid-oidc#18 (comment) https://solid.github.io/authorization-panel/authorization-ucr/#uc-delegation-subset already mentioned that idea of TBC soon in dedicated issue If we conclude that ACR of ex:SolidResourceA acp:accessControlResource ex:SolidAuxiliaryACPAuthorizationResourceB .
ex:SolidAuxiliaryACPAuthorizationResourceB acp:accessControl ex:ac1 .
ex:SolidAuxiliaryACPAuthorizationResourceB acp:accessControlForAuxiliary ex:ac5 .
ex:ac1 acp:policy ex:p1 .
# ex:p1 details aren't relevant
ex:ac5 acp:auxiliraryRelation acp:accessControlResource.
ex:ac5 acp:policy ex:p5 .
ex:p5
acp:allow acl:Read, acl:Write ;
acp:anyOf ex:acrMatcher .
# ex:acrMatcher details aren't relevant As we see this would allow Access Control to apply to auxiliary resource based on given relation. It would also allow use of regular access modes like |
@elf-pavlik I think we're not 100% aligned on the meaning of This predicate links a resource to the thing that mandates access over it. Therefore it is perfectly possible to have a graph such that: ex:SolidResourceA acp:accessControlResource ex:SolidAuxiliaryAccessControlResourceA .
ex:SolidAuxiliaryDescriptionForResourceA acp:accessControlResource ex:AccessControlResourceB .
ex:SolidAuxiliaryAccessControlResourceA acp:accessControlResource ex:AccessControlResourceC . This graph could further contain everything about There is no need to create a new predicate for Solid auxiliary resources (or every type or Solid auxiliary resources) because they are resources. Access Control Resources and therefore Access Controls can already apply to Solid Auxiliary Resources with this simple data model. Note that this point is exactly why I pondered the idea of having
Absolutely, we should clarify on the Solid Protocol level which access modes can be granted over Solid Auxiliary Resources as entailing operations on each type thereof AND whether those can be granted separately from the access modes granted over a Solid Resource. I can imagine for example that it would be quite handy to have only a certain class of agents able to edit the description or shape of a resource. The |
After rethinking the problem I think we don't actually need to set specific policies on ACR itself. Just as the storage owner has implicit access to all the resources in the storage. We are going to have Authorization Server associated with each Resource Server (Storage). I think this associated Authorization Server can have similar implicit access to all ACRs. In that case, Resource Owner sets policies using their Authorization Agent which results in the generation of Data Grants. Later the Authorization Server associated with Storage (RS) based on those Data Grants can set ACRs on the storage. I think it is not needed or even desired for any party other than AS to modify ACRs. Given all that I see no need to granular access control over ACRs themselves, implicit (as not expressed via ACRs) access for AS associated with RS seems sufficient. |
On proposal
ACP: Remove the
acp:apply
andacp:access
predicates in favour of a singleacp:policy
predicate.Details
Description
ACP is a data model to express the conditions of access to resources.
An ACP Access Control Resource mandates access over a resource.
Why talk about controlling access to Access Control Resources when the spec does not talk about controlling access to Access Controls, Policies and Matchers?
The only thing ACP is talking about is controlling access to resources and it should not talk about controlling access to Access Control Resources because there is nothing special about them.
RDF and Cool URIs talk about what a resource is, ACP is orthogonal to those documents.
The Solid Protocol defines the relationship between a resource and its auxiliary resources, for example authorization resources, ACP is orthogonal to the Solid Protocol.
In the case of the Solid Protocol, an authorization resource lifecycle depends on the lifecycle of the subject resource that they are associated with.
Currently, the ACP spec treats the Access Control Resource as a specifically separate resource with its own access modes which is incorrect, hints at a separate lifecycle and is hardly compliant with Solid.
The ACP specification should remove every mention of an ACR mandating control over itself.
It is not up to ACP to mandate that permissions over an Access Control Resource will be mandated by another Access Control Resource (ACR on ACR), by a specific access mode (the Solid compliant acl:Control) or by another mechanism.
Logically, this also entails removing the
acp:access
andacp:apply
predicates that invent a new way of mandating control over Access Control Resources hence implying that they are special, as opposed to Access Controls, Policies and Matchers.The
acp:access
andacp:apply
predicate should be removed in favour of a neutral and spec orthogonal predicateacp:policy
.Details of the current situation
In ACP there are currently two predicates to link an Access Control to a Policy:
acp:apply
links an Access Control to the policies applying to the Resource itself::acr acp:resource :resource . :acr acp:accessControl :acl . :acl acp:apply :policy . # :policy applies to :resource
:acr acp:resource :resource . :acr acp:accessControl :acl . :acl acp:access :policy . # :policy applies to :acr
Drawbacks from an implementers’ perspective in addition to the fundamental design flaw might be worth mentioning:
acp:apply
andacp:access
is confusing, that is, the semantics of these predicates is unclear/misleading and has previously been discussed as far from ideal.acl:Control
is used.Proposal
The proposed solution would be to use a single acp:policy predicate which would remove the design flaw, spec orthogonality issues and aforementioned implementers’ problems:
acp:policy
links an Access Control to a Policy:Acceptance criteria
What actions are needed to resolve this issue?
acp:access
andacp:apply
from the ACP Draft in favour ofacp:policy
The text was updated successfully, but these errors were encountered: