-
Notifications
You must be signed in to change notification settings - Fork 0
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
2025-03 dev log #12
Comments
Yay! This feels like a fun project for this week. I also want to add in the ecosystem tests that I started working on earlier this year IIRC. |
Ah yes, solid-contrib/ecosystem-tests#1 |
I'll test this now with Pivot and empty-solid-app |
michielbdejong/empty-solid-app#3 done. It works with NSS and Pivot now. |
will dig into pivot.pondersource.com logs and find out why my ACL file is not working as intended - solid-contrib/ecosystem-tests#4 (comment) |
OK, so my understanding now - Solid is actually more broken than I thought, unless I'm missing something. This would be a continuation of the work I started a few weeks after joining the Solid project (now almost 5 years ago) in solid/webid-oidc-spec#12 but it seems that this was never satisfactorily finished or properly implemented anywhere as far as I'm aware. So the big picture is this: For authentication, you could use
In case 2., who gets to decide which clients are trusted? It's one thing to share your identity directly with a storage server, but another to share your identity with a client and then let that client act on your behalf through DPoP. But if the application is itself an agent and not (just) a client then it makes sense to whitelist this application by its WebID and not by its origin. If we disable dynamic client registration at the IDP then it's basically saying that a given WebID cannot be represented by a dynamically registered client. Then a WebID can be:
Ideally you would want arbitrary levels of delegation, but what we have in Pivot/CSS and in NSS is DPoP-on-storage, which means we get to specify up to two levels, namely one agent and optionally one client. |
And actually UMA doesn't change much here, since it still goes WebID -> OIDC -> DPoP -> UMA -> storage, so there is still a DPoP step. The basis of Solid's security model is the ACLs (WAC or ACP), combined with WebID and OIDC. There are then four approaches:
|
An application can have its own WebID, have its own backdoor way of getting its OIDC identity token from its IDP, and then use DPoP to present it. In fact an application would probably have a dedicated built-in IDP? And then DPoP makes sense! Maybe I can create a single app-hosting server that acts as an IDP and OIDC provider for otherwise static client-side web apps. The interaction between this server and the app can be custom, and based on same-origin. Ah, it would have to act as a proxy, otherwise the app could just be scraped and impersonated.
|
OK, unexpected plot twist, I finally understand that WAC has no way of identifying clients.
|
Suggested a WAC spec change that could make it compatible with Unhosted. Still, not sure if I should put energy into that, or switch away from WAC-based Solid to work on other stuff. |
|
|
Second attempt:
|
Right, that works!
|
Now I need to author an ACR that restricts access to /bookmarks to:
And restricts access to the rest of this pod to:
|
I can use this fixture as an example. |
Will continue with this next week |
Solid
The text was updated successfully, but these errors were encountered: