-
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
Privilege Request Protocol is not reusable across Solid; only covers one very specific case #27
Comments
I agree with @RubenVerborgh in that we should look at the different options in our toolset to support this. It would be worthwhile to further document and then compare the merits of this approach against the protocol suggested by @zenomt. One caveat is that using LDN for this would require mechanisms for verifying the source of the notification message to ensure that submitted privilege requests are coming from verified sources (so someone cannot spoof a privilege access request). |
i disagree with this assessment. what i'm calling the "privilege request endpoint" is essentially an inbox to which one posts a request. the inbox URI is (or should be) a capability, but is not itself a verb. the location of this inbox is discovered via hypermedia (in a Link header). you make a request for additional privilege by in the successful case, you receive a representation of the acceptance (HTTP this is as HATEOAS as it gets. it could be a little more Solid if the permission request and response representations were RDF (maybe Turtle or JSON-LD) instead of |
preface: privilege-request-protocol was designed to be a simple and general solution to a general HTTP problem ("i don't seem to have access to this resource... but maybe i could!") and as it stands is general enough to cover the Solid use case without being Solid-specific, while being as simple as possible (but not simpler). i intended it to be able to go the IETF eventually. changing the order of your bullets a little.
for the permission request payload, i would have no objection to defining an RDF representation, except that by not having it be for the response payload, i think it's a fine idea for it to be JSON-LD, but minimal/simple (that is, adding a
i think this implies different operational semantics than my proposal, and would be a substantially different protocol (or i'm missing something). i think a concrete proposal, that works through use cases and with a representative example, would help me understand exactly what you mean and would aid discussion. |
Oh dear. The classic REST debate again. I'm firmly in the Ruben camp here though, but unfortunately the distinction between So basically I'll just say I support Ruben's suggestion of LDN notifications instead here (as I do see query params stuck onto IRI's when trying to explicitly identify resources (in this case 'inboxes') as too limiting when building truly flexible RESTful systems). Likewise, I also support mandating RDF (over 'allowing just JSON'), again for the flexibility and interop benefits it brings. And finally, introducing spec decisions just to avoid CORS inflights seems like premature optimization to me (i.e. as Ruben says, inflights are inconvenient, but certainly not an obstacle). |
please note that the URI given was from an explanatory example HTTP interaction, and is the (opaque to the client) target URI of the permission request link for this request. the actual target URI is entirely an implementation detail of the server. the example i gave was representative of one way i imagined a server might be implemented. this URI represents a time-bounded capability for requesting additional privilege related to the denied request. as an implementation detail of the server, this capability WOULD PROBABLY relate relevant context of the original request including the URI and method, the authenticated identity used to make the request, the identity of the application used (for example, the |
@zenomt, the form urlencoded approach introduces additional components into the system: Sender-Receiver: form urlencoding, Consumer-Receiver: JSON(-LD). I agree with Ruben that shaping different kinds of request information is already well-aligned with the existing/expected architecture and interactions. @RubenVerborgh, I think the alternative you suggest for the most part sounds like what we've covered in Resource Access at solid/data-interoperability-panel#13 (comment) , right? Part of the notion of a "request notification" for different use cases. I'll comment on the PR.
That entails making it LDN-like by either:
Are you suggesting option 1? Aside: this circles back to resolving issue on which RDF syntaxes to require in the system and to what purpose (partly discussed in solid/specification#6 ). If for instance Solid applications are required to be OPTIONS/Accept-* (or whatever) capable, then option 3 above looks attractive. @justinwb, verification++. Another panel can figure this out ;) |
@csarven urlencoding and JSON are already part of the system: in addition to being nearly universal and foundational, support for these encodings is included in every web browser and most popular languages, and is already needed to talk to OpenID Connect Providers. |
respectfully, i disagree with this assessment. we spent quite a bit of time talking about this point over several panel calls (although i don't believe we reached complete unanimity on this point).
the client probably won't know how to request what it really needs from a server. especially in the "not Solid-specific" case. the easiest thing is to try. a good server (value-add differentiation opportunity) can guess likely generalizations of privilege to present to the user/controller/admin based on the original request.
"the one i used to make the request".
i think this is out-of-scope for "app authorization", and is a general permission management problem. please revisit the envisioned use cases. in the course of processing a request for additional privilege, an owner/controller/admin might add the requesting user to a group as one way to fulfill a request for access to a (class of) resources.
do you imagine a client would make a request for access to a resource for only during certain periods? otherwise if the client can access a resource now it does; if it's not allowed now it'll be denied and given the opportunity to request additional privilege (the meaning and management of which, as in all cases, is entirely up to the server).
for a not-LD-specific general purpose method intended for use in web browsers, and without a compelling technical reason for a non-CORS-simple-request content-type, it might be an enormous obstacle to reaching rough consensus in the IETF if standardization is desired.
my use of "user" was probably confusing. i meant the client (application), which is using the link. to make use of it, the client (app) needs to know what the TBD link relation is for no matter what. in the simple case (as currently documented) the request body is empty. i have a few ideas for things that might go in the request body, like a webhook for a server-side component or bot to know when a request for additional privilege has been processed, and perhaps a hint that the client can't or won't launch a browser-based permission management interface (which might affect how the server determines to process the request -- for example, the request might be sent to an admin even if the authenticated user has authority to process the request).
in the envisioned "not Solid-specific" general case, Turtle support is not a given, and requiring it will also be an obstacle for standardization in the IETF. for JSON-LD, i was imagining constraining it like i've seen in other standards with a mandatory default vocabulary (i'll look for a reference) so that if the client doesn't know JSON-LD but knows the vocabulary for this activity, it can understand the response (and it would already ignore unrecognized keys, like
i look forward to this taking shape. ;) |
these two statements are not mutually exclusive.
my reading of that issue is for it to be possible to express in an ACL during what periods an access rule is active. a request by an app for time-bounded access (that is, an app asking for access to a class of resources but only for during some period(s) -- for example, "i want to read and write your chats, but only on wednesdays") is not a use case that we've considered, nor one i think is realistic.
AppA requesting permission for AppB is not a use case that we've considered, nor one i think is realistic. a user/controller/admin/owner managing the privileges for different apps and users to resources on a server (including when those privileges might apply) is an orthogonal, but no less important, problem to the one addressed by the privilege request protocol, which is concerned only with requesting additional privilege when denied access because of insufficient privilege. |
i meant that both "the client probably won't know how to request what it really needs from a server" and "The client exactly knows what it wants to do. The server does not know that." are not mutually exclusive.
sorry, then for both of these i must not understand what you mean.
access to resources is always made with or through some app, even if it's data browser views on the resource server (and with the exception of directly viewing raw resources in your web browser, which is already not going to do anything interesting with a i think it's likely that non-owner/controller users will either end up with "use any app you want" permission or, on really fancy servers, each user will be able to control and limit what apps can access different classes of resources for/as that user. based on the comments in this Issue so far, i feel that my proposal must not adequately convey its philosophy and scopes of operation and function.
i am also not in favor of a proliferation of highly specialized endpoints. i look forward to more detail in your #28 proposal. |
@zenomt answered @RubenVerborgh's point on simplicity
In those calls I mentioned a few times that I thought the proposal of having a mechanism to allow an app to request changes to ACL's was clearly a good idea. I also mentioned that it would be useful to think of what general category of client/server interactions it fit into, as that would likely show that we could use an more general mechanism for notification, so as to avoid inventing a new one. |
For 'app authorization' I see common scenario where
I don't want to box panels to hard but since above doesn't involve any notion of app I see it possibly out of scope for 'app authorizaion'. To comment on Privilege Request Protocol in general, I see it as a submission from @zenomt to this panel. I think we should clarify what specific use cases it addresses and stay open to consider various alternative approaches that satisfy those use cases. I can also see that this submission doesn't address use cases I need solid to cover so submitted Privilege Request Protocol doesn't provide a complete solution for app authorizations. Just during last call I noticed requirement for establishing independent session with resource server to use it with resource server specific UI:
Implementations and deployments I want Solid to enable for usage patterns I aim for, need to work with any number of Resource Serves smoothly integrating into workflows. I understand PoP Tokens in WebID-OIDC also come out of such motivation. Establishing separate sessions with all those Resource Servers and requiring person to interact with number of different (RS specific) privilege management interfaces, I see as burden on users that other approaches can prevent. Given above Privilege Request Protocol currently does seem to me like addressing very specific use cases, which I still need to better understand. Possibly more enterprise environments with stricter requirements on what needs to stay under control of Resource Server operators. Personally it sounds to me comparable to 'one needs to use company provided blackberry' vs. 'one can use one's own Android or iPhone device', it also reminds me of story related to Personal Clouds told by Doc Searls in this keynote: https://www.youtube.com/watch?v=ZaFmSmDdZBA |
unless it's the consensus of the panel to abandon my proposal, please open an issue against it with the use case you feel it doesn't address.
there is no requirement for the server to provide its own server-specific UI. however, if one is provided, it'll probably be necessary for the client to present it to the user, as it'll probably be part of the approval process. i agree it's not an ideal user experience. however, i felt it was necessary in order to address the privacy concerns of #7 and #17 (comment) in a natural way. presumably the number of times the user would need to interact with such an interface on any server will be limited (ideally to "0 to 1 times"). i've considered (and mentioned earlier in this thread #27 (comment)) a possible extension to indicate that the client requesting additional privilege can't or won't launch a browser-based management interface, which could affect how the resource server processes the request. it might be a good idea to invert this, such that the default case is the client can't or won't launch such an interface, but the client can give a hint that it would launch such an interface for the user, if available and appropriate. the philosophy of the privilege request protocol is: "a client either has sufficient privilege to access a resource(s), or it does not. if it does not and is denied access to one of those resources, it might be able to request 'additional privilege'. what constitutes 'sufficient privilege', and how privilege is managed, represented, and enforced, is solely the purview of the server. oh and sometimes people use web browsers." |
I don't say we should abandon it, I think it comes as possible solution to specific subset of all use cases but it doesn't address all the use cases. I've responded more to it in #7
per application, which also doesn't include changes to authorization and revoking it #24 |
No description provided.
The text was updated successfully, but these errors were encountered: