Replies: 2 comments 1 reply
-
My consideration was taking authentication and authorization as decoupled components (by default) where the Guard provides information from authentication to authorization eg. when an entity's (organism, machine, ..) identifier (or any other parameter) is provided as input to authorization, it is assumed to to be authenticated - for all intents and purposes. The authorization system doesn't normally question or doubt the inputs. So, any parameter (whether the input is agent's WebID, the Origin value or something else) that can be used by the authorization component is taken "as is" - but that's of course not a rule. In the case of the Origin header, I figured that signing the HTTP message may be one way to ensure who/what is making the request, but it could be some other way. This is beside the point on Origin's purpose or flexibility to what's desired. |
Beta Was this translation helpful? Give feedback.
-
I think this is related to the question @elf-pavlik asked on gitter on May 03 21:39 CET
The Launcher App would only sign headers for requests that the user had allowed the App to reach using one of the user's The App can be identified by the Origin, a header the Launcher App could sign. If the App also wants to authenticate, that would be possible too, and it could add another signature to the HTTP headers using the method described in the IETF spec. But I am not sure which use cases would require it: the Launcher App (or Wallet's (Authorization?) Agent equivalent in SSI talk) is the one making decisions as to what key can be used for a given resource for a given app. In any case: the Launcher App can sign different requests with different |
Beta Was this translation helpful? Give feedback.
-
In a discussion with @csarven yesterday on Origin and Access Control Rules (AC Rules), I think I came to an interesting insight that should help simplify how we think about authorization. In short this covers the question that @elf-pavlik always asks: how do we take into account the agent that is sending the credentials from a different origin.
The trick is to think of the Guard as verifying two things
i. that the connection is controlled by some Agent A, with as proof the TLS certificate (for WebID-TLS)
i. that the client is in possession of an Solid-OIDC token with a specific semantics
i. that an Agent A, signed a header for a particular request at a particular time (HTTP Sig)
i. that an Agent A has some attributes as submitted by another Institutional Agent and wants access to R
acl
link header linked to from that resource.I will look at the case of HTTP Sig, where the HTTP headers are signed by a Launcher App. The Launcher App can sign headers as requested by an App using Iframes as tested here. For each client the Launcher App can have policies as to what requests it will sign on which resources globally.
So let us look at the case when a Guard for a resource
R
on a solid server receives a signed HTTP Requestreq
signed by an agentA
listed as being allowed that mode of access. Let us add that requestR
comes via an originO
or even an agent identified by AppId. So to ground our intuitions a bit, here AgentA
may be a human identified by a WebID orkeyId
for example andO
would be a software agent.The guard on receiving the signed HTTP request is essentially getting the following statement:
For which it can deduce that
And so
O
falls out of the equation.Note that
How would this work with Solid OIDC?
I think this can be formalized very cleanly with Abadi's logic of
saying-that
, but it is also really quite intuitive.Beta Was this translation helpful? Give feedback.
All reactions