Re-decentralizing the web
Solid (derived from "social linked data") is a proposed set of conventions and tools for building decentralized Web applications based on Linked Data principles.
This repository contains a PHP library for accessing data and managing permissions on data stored in a Solid Pod It also a contains a Symfony bundle to easily build Solid applications with the Symfony and API Platform frameworks.
Take a look at the presentation of this library at the SymfonyLive Paris 2022 conference.
composer require dunglas/solid-client-php If you use Symfony or API Platform, the bundle and the corresponding recipe will be installed automatically.
<?php use Dunglas\PhpSolidClient\SolidClientFactory; use Dunglas\PhpSolidClient\OidcClient; use Symfony\Component\HttpClient\HttpClient; $solidClientFactory = new SolidClientFactory(HttpClient::create()); // Create an anonymous Solid client $anonymousSolidClient = $solidClientFactory->create(); // Fetch the WebID profile of a user $profile = $anonymousSolidClient->getProfile('https://example.com/your/webid'); // Fetch the OIDC issuer for a user $oidcIssuer = $anonymousSolidClient->getOidcIssuer('https://example.com/your/webid'); // Create a Solid OIDC client for this user $oidcClient = new OidcClient($oidcIssuer); // Register the OIDC client dynamically $oidcClient->register(); // Authenticate the user $oidcClient->authenticate(); // At this point you may want to save $oidcClient in the session // The user will be redirected to the OIDC server to log in // Create a Solid client generating DPoP access tokens for the logged-in user $loggedSolidClient = $solidClientFactory->create($oidcClient); // Create a new container $containerResponse = $loggedSolidClient->createContainer('https://mypod.example.com', 'blog'); $container = $containerResponse->getContent(); // Post a new note $apiPlatformResponse = $loggedSolidClient->post('https://mypod.example.com/blog', 'api-platform-conference', <<<TTL @prefix as: <http://www.w3.org/ns/activitystreams#>. <> a as:Note; as:content "Going to API Platform Conference". TTL ); $apiPlatformCon = $apiPlatformResponse->getContent(); // Fetch an existing note $symfonyLiveResponse = $loggedSolidClient->get('https://mypod.example.com/blog/symfony-live'); $symfonyLive = $symfonyLiveResponse->getContent(); // Logout $oidcClient->signOut($oidcClient->getIdToken());- Standalone PHP library
- Symfony Bundle
- OAuth/OIDC authenticator
- Solid client as a service
- Modern and Fully featured OAuth and OpenID Connect client (work even without Solid, extends
jumbojett/openid-connect-php) - Solid OIDC
- Linked Data Platform
- Solid HTTPS REST API (uses Symfony HttpClient)
- Solid Content Representation (delegated to EasyRDF)
- OAuth Client ID
- Solid OIDC "Request Flow" (currently not supported by mainstream Solid servers)
- Web Access Control
- WebSockets API
- Social Web App Protocols
- WebID-TLS (not supported anymore in web browsers)
- Symfony Bundle
- Redirect after login