Redirect Requests using a Backend for Solid

Hey all,
I’m currently working on making a server that can interact with multiple user’s Solid pods, with the goal of storing/holding as little individual information from said pods as possible (i.e. not using client IDs, client secrets, or other forms of direct authentication and only extracting what the server needs from the pod). My current idea is to set up an OIDC redirect flow that would allow clients to log into their pods for the server on their own local devices, however all the OIDC implementations I found online involve using a frontend, which to my knowledge only allows local data exchanges with their device and doesn’t allow the user to send information from their pod to the server and vice-versa. Thus I was wondering if anyone had developed a solid backend library which supports OIDC redirection login, or if anyone had implemented a manual 300 redirect request that could be sutured on my own backend server.

You need to be more clear about what you are asking. A server-side application may not need to store any information at all, unless you want sessions or cookies to be tied to a device. Your application uses the OIDC provided access tokens to make requests on behalf of the agent to the agent’s pod. Your application would be responsible for querying the authorized agent’s pod data and then storing it on the server; but I see no reason for you to do this.

The idea is to use the server to extract embeddings from various Solid clients in a federated setting, so the server needs the ability to receive information and send it to the main algorithm. Maybe using a server wouldn’t be the best way to achieve this though. If you have any tips or recommendations I’m all ears

extract embeddings from various Solid clients in a federated setting

How would you create embeddings from a client?

A client is something used to access data. You can transform data stored in an agent’s pod into an embedding, and a client can be used to access the embedding, or extract the data and perform an embedding and forward the embedding to a server by using a client. Is this what you are trying to do?

Sorry for the confusion, let me try and explain my overarching goals better.

So our main goal is to execute Federated Learning in order to teach an AI how to make financial predictions. Our current plan involves using Solid as an extra security measure to store and safeguard user’s private data and attempts to execute it like this: Setting up a global server, we wish to connect this server with multiple separate Solid Pods (those pods being our FL clients), the server would send its AI model to each client’s local device and have them train the model using data from their own pod. After completing its training, we would need each client pod to return the updated model weights (in this context known as embeddings) back to the server so it could aggregate an average and update its own global model. This is the step we’re currently stuck on, as we have been unable to find a way for a Solid Pod to interact with an external server via the back-end that doesn’t require digital passkeys that weakens user security, which is the main priority and focus of this research. Our old idea was to set up a local redirection for Client Pods, such that users could personally log into their pods, connect them with the server, and send their model weight updates without needing the server’s direct intervention, but that pathway is currently stalled because every redirect library I’ve found pertaining to solid works on the Front-End and only allows information to be downloaded locally on a user’s PC. Do you (or anyone else) know of any methods I could implement to allow Global Server-Pod data interactions/transactions through a method that retains User’s Privacy, either through redirection or some other method?

|| So our main goal is to execute Federated Learning in order to teach an AI how to make financial predictions. Our current plan involves using Solid as an extra security measure to store and safeguard user’s private data and attempts to execute it like this: Setting up a global server

Is this global server a Solid server or an aggregation server for the clients model weights to be aggregated on?

|| we wish to connect this server with multiple separate Solid Pods (those pods being our FL clients)

Again, a Solid Pod is storage. It has no inherent concept of executing code. You need a client app executing somewhere else with access to the necessary data **stored within a Pod.
**
Libertas by the Oxford Team is a work which uses secure multi-party computation to interact with Pods. This may be a good starting point. I still do not know why you need this redirection concept. If you want anonymity you can issue a ticketing system to clients and allow them to redeem on a server as long as they have the ticket. This way you know they have access to the model weights but you do not know who submitted which model weights. There are more secure ways to do this but mine is a simple example.

1 Like