Add creator definition and requirements to record and protect creator#807
Add creator definition and requirements to record and protect creator#807csarven wants to merge 7 commits into
Conversation
|
This is great! |
|
Implemented in dokieli (source code, code change) |
|
Some technical issues with the proposed requirements, in rough order of severity. 1. 2. "When a server wants to track…" is not a testable conformance condition. 3. The immutability guarantee is void under the deletion lifecycle. 4. The privacy advisement has no conforming mechanism. 5. 6. For RDF sources the assertion is forgeable in the subject resource itself. 7. Minor points.
|
|
Can you please add HTML diff? I don't find raw RDFa diff to be something human readable 😵💫 |
| <p about="" id="authorization-resources" rel="spec:advisement" resource="#authorization-resources"><span property="spec:statement">Servers are <span rel="spec:advisementLevel" resource="spec:Encouraged">encouraged</span> to use authorization techniques to prevent unwanted access to resources, rather than depending on the relative obscurity of their resource names.</span></p> | ||
| <p about="" id="identifiable-information-error-responses" rel="spec:advisement" resource="#identifiable-information-error-responses"><span property="spec:statement">To prevent leakage of non-resource data, servers are <span rel="spec:advisementLevel" resource="spec:StronglyDiscouraged">strongly discouraged</span> from including identifiable information in error responses.</span></p> | ||
| <p about="" id="webid-profile-privacy" rel="spec:advisement" resource="#webid-profile-privacy"><span property="spec:statement">The decision to include or exclude any information (e.g., storage, inbox) in a WebID Profile served from a Solid storage lies with the Agent controlling the WebID (or the URI owner). A URI allocated to a WebID in a Solid storage does not imply that the WebID is the storage owner. Owners of a WebID hosted from Solid storage are <span rel="spec:advisementLevel" resource="spec:Encouraged">encouraged</span> to consider information related to themselves that could be readable from other resources in the storage, even if that information (e.g., storage, inbox) is not part of the WebID Profile itself (see <a href="#storage-owner-uri-ownership">Storage Owner and URI Ownership</a> and <a href="#self-describing-resources">Self-describing Resources</a>.)</span></p> | ||
| <p about="" id="creator-privacy" rel="spec:advisement" resource="#creator-privacy"><span property="spec:statement">The <a href="#creator">creator</a> of a resource reveals information about an agent’s identity and activity. Disclosure of the creator through a description resource is subject to the same authorization rule as the subject resource. Servers are <span rel="spec:advisementLevel" resource="spec:Encouraged">encouraged</span> to minimise disclosure beyond what is necessary. Servers <span rel="spec:advisementLevel" resource="spec:Can">can</span> honour an agent’s request not to be attributed, or to have an existing attribution removed, for example, to meet data protection obligations.</span></p> |
There was a problem hiding this comment.
Does it mean that the use case of recording the creator without disclosing it to everyone who can read the subject resource remains unsolved?
There was a problem hiding this comment.
Thanks. I've clarified creator-privacy to be more concrete on what is intended, removed parts that were intentionally left open for features in the future, and added a bit on transparency.
Correct, that use case is not addressed. That's deliberate. Attribution is either recorded in the description resource and disclosed under the subject resource's authorization rule, or not recorded at all. Consistent with the Protocol.
This feature is for readers. Auditing or moderation by URI owners or server operators doesn't (particularly) require interop, since servers can keep internal records outside the protocol any way. Client-asserted authorship is forgeable, the server-asserted creator statement is not, and so the latter is trustable, and it's only useful if readers can see it. Disclosure to the resource's readership is the feature, not a side effect. This is a common practice e.g., commit log or wiki history.
There was a problem hiding this comment.
https://solidproject.org/TR/acp#matcher has acp:CreatorAgent
I recall commonly requested feature that access policies may have special case if agent is the creator of a resource. Would the intent be to have two separate mechanism for recording and disclosing the creator for the use case that this PR intends to satsify and for the use case of setting such access policies?
There was a problem hiding this comment.
@elf-pavlik, as I am interested in that functionality as well - I have to admit that I cannot follow your question.
How do you come to the conclusion that the would be two separate mechanisms for recording?
The authorization (for creator access) could simply look at the listed creator, captured via the here described mechanism, no? Am I missing something?
There was a problem hiding this comment.
With this proposal, if creator is recorded it is always disclosed to whoever has read access to the subject resource. So if Max creates a report in TAO's storage, description resource gets tao:report-x dct:creator foo:max ., then when TAO gives read access to SME they also end up disclosing that Max specifically created this report.
I see problem that recording the creator requires such disclosure and there is no flexible way to control how it gets disclosed.
There was a problem hiding this comment.
Understood. Just pointing out that this is true also for all the other metadata (creation time etc).
Given the concrete proposal wording, I don't think that it is mandatory to record the creator of a resource and add it to the description resource. Therefore, I think it is also possible to simply record it but not put it in the description resource?
If you desire to decouple the access control lifecycle of the metadata from the primary resource then maybe -- for such use cases -- the description resource is not the best place for (to be private) metadata? Consider linking to another primary resource with that private meta data using rdfs:seeAlso from the description resource of the first primary resource.
I think a Server Implementation geared towards such privacy-critical use cases would be able to accommodate for such use cases even with the currently proposed wording.
|
This is a valuable piece of provenance to be capturing. In addition; I would suggest also providing a way for servers to capture the following:
|
|
Just noting that |
Wouldn't it make sense to design it in a way that recording it and having it for available for access control is independent from if/how it is disclosed to clients? Related to this thread #807 (comment) I would be more comfortable if by default at least control mode was required to obtain creator information. This PR doesn't inform who makes the decision if creator is recorded in the first place - implementer, deployment manager, server admin, storage owner, user. Having it recorded internally first and later adding standard process for the storage owner to manage disclosure would be my preference. |
|
@elf-pavlik, to my understanding of this PR (@csarven, please do correct me), your comment is orthogonal to what both this PR and solid/web-access-control-spec#139 are about. How exactly the creator of resources is recorded or where that information is stored in a Server is independent of the above issues. Today's Servers could/can already record the creator of a resource (which we did e.g. for MANDAT). To my understanding, this PR aims to specify how a Server would indicate the creator of a resource -- if and when the Server records and (wants to <- not testable) indicates resource creators. It is true that both of the above mechanisms use the underlying recording of resource creators by the Server. Still, related to your other creator-recording question, I believe that this PR is just one way to indicate the resource creator based on an server-internal recording of resource creators. At the same time, there is no obligation to record creators at all -- or to store creators somewhere other than the description resource (if the Server so chooses). The PR and the WAC issue simply make no statement about that. |
|
Thanks for clarification! Having full human readable diff available would make this review easier #807 (comment) I understand that this PR only intends to define the potential disclosure part by
I think the above would need to be adjusted, to don't assume if server tracks it or not but only if it wants to disclose it. The next step IMO would be to look at possibly having a separate PR to specify requirement for server to track it, or not and maybe advertise this capability. |
Co-authored-by: Christoph Braun <christoph.braun@protonmail.com>
Co-authored-by: Christoph Braun <christoph.braun@protonmail.com>
elf-pavlik
left a comment
There was a problem hiding this comment.
I see need to define in loosely coupled manner
- recording creator of the resource
- disclosing creator in a controlled way and a mechanism to control that disclosure
Besides above, adding 'protected' statement to the Description Resource can lead to various issues. Based on known implementation challanges related to current precedent of having protected statement in a container description.
- https://communitysolidserver.github.io/CommunitySolidServer/latest/usage/metadata/#protected-metadata
- and 0 implementations of protected statements proposed by WebID-Profile draft long time ago
|
Thinking about possible ways to have this proposal available for experimenting without the lack of consensus blocking it. In lines of https://github.com/w3c-cg/solid/blob/main/framework-for-proposals.md This could be a separate proposal listed on https://solidproject.org/TR which could provide a better reference to potential implementers than an open PR. |
|
Hm. I don't see these requirements here:
Whether a Server records the creators of resources is not a question of interoperability but rather an implementation choice. With that, I don't think there is a requirement that this specification must/should/would require a Server to record resource creators. (That is an internal thing after all.)
How a Server is configured to indicate a resource's creator seems to be -- to my understanding of this PR and the discussion so far -- out of scope for this PR. That said, nothing here forbids defining such a mechanism in a separate PR. You are welcome to propose something that builds on this!
I politely request you to enumerate the "various issues".
I don't see how the two bullet points support the claim that protecting particular statements on the server-side are challenging. LDP (the W3C REC) specifies such behavior as well for Besides, your link is just documenting CSS behavior. Nothing challenging to see there.
The fact that you don't know of any implementation (where I think to remember that ESS does it - but happy to be proven wrong) does not prove that it is hard or challenging to implement it. Independent of the above, I am wondering what particular changes you are requesting? |
|
Dear @elf-pavlik, I politely request you to refrain from introducing procedural blockers where none are due. There is no need to branch this proposal out into a spec fork or a self-contained proposal/work-item. There is no need to rush anything or to delay anything. If you have feedback, provide comments and/or suggest changes that are actionable. If you want to experiment with the proposed functionality, you are welcome implement it and provide feedback in a meaningful manner, e.g., by suggesting concrete changes. Cheers |
Since this PR tightly couples recording and disclosure, I see need that such behavior is being advertised. See also #807 (comment)
Then
This PR adds
How do you imagine building alternative mechanism for disclosing the creator on top of this tightly coupled approach? BTW one can always propose changes that replace something in current draft, not only build on top of it. Of course the bar is higher but there's nothing preventing replacing current functionality in a CG draft.
If you like we can dive deeper into
And why current CSS implementation could extend list of 'protected' predicates, as long as client only uses
As far as I know ESS doesn't create WebID inside of user's storage, which makes it more secure than default CSS config.
either further work on addressing it or #807 (comment) |
|
Did you review the latest changes to the proposal? |
|
The preview link was updated 20min ago, I'll take another look. EDIT there is a power grid maintenence scheduled for today, I may be offline for next couple of hours. |
|
Given current state of this PR and my understanding of a use case that it tries to address.
It pretty much only ensures clients that Can we accomplish the same by simply having something in lines of When a server indicates the creator of a resource created by a successful request from an authenticated agent, the server MUST include an HTTP This way we should have equivalent solution without getting into problems like sub resource access control and protected triples which lead to nuances exemplified by CSS tricks used to implement ones on containers. |
|
This variant could be even more bulletproof: When a server sets in a response an HTTP So if server sets it to anything other than recorded creator it violates those requirements. This should give clients safety to rely on that link relation if present in the response. BTW, approach proposed in this PR looks like a breaking change, while link header approach is probably less breaking (technically should also be considered as breaking)
Wouldn't setting it in a Description Resource to something else to creator fall under that? We could test it with solidcommunity.net today. Link header wouldn't break any known to me implementation / deployment. It doesn't strictly apply to CG drafts since they are not on REC-track, but if we want to use this classification we probably want to consider it. |
This PR introduces the feature to record and protect the creator of a resource along with some privacy considerations.
This PR includes class 2 and 4 changes (Processing PRs):
Resolves #315 , #66
Preview