Package: arpa2.wsgi
README for ARPA2 WSGI middlewareWSGI enables middleware, which is a perfect place
for enforcing ARPA2 Identities, ranging from
authentication to authorisation through access control.Background links:InternetWide Identity DesignARPA2 Identity(formerly known as DoNAI)
supportsmany formsandseveral tricksARPA2 SelectorAccess Controlwithefficient implementationand a design forbackend protocols.HTTP SASL handled with WSGI SASLMost protocols that require authentication make use of the SASL
protocol.  Maybe it is better to say that SASL is a kind of
tunnel that passes through a protocol to exchange authentication
in a flexible manner.  Most importantly, the mechanisms can be
plugged into software independent of the protocol that uses SASL
and one infrastructure can be shared by all the protocols.HTTP has not had SASL implemented.  We havespecified HTTP SASLto fix that, and stop the ongoing need for authentication systems
built into the (rather insecure) JavaScript namespace.
We are implementing it with a few Java demonstrations, as well
as abrowser extensionwithnative messagingso we may reuse desktop credentials from a trusted application
outside the browser.  Yes, that includes one's Kerberos login
and yes, it enables the use ofpseudonyms during realm crossover.We are hoping to develop a Python WSGI component for the server side.
It would sit between the web server and WSGI application, and
detect 401 or 407 responses, annotate them with SASL authentication
option and hope to find a browser that responds to the option of
SASL authentication.Current status:There is no reasonable support for server-side
SASL at this moment.  We have asked others to help out with this.HTTP User handled with WSGI UserAuthentication users are client identities.  Most protocols also recognise
a user on the server side, but HTTP does not.  And if it does, it is
supposed to be the same as the client identity, which is thereby forced to
fall under the server's realm.  We see the resuls everywhere; the web asks
you to create an account on many sites you visit.  This is not practical.We therefore proposed an extension to HTTP that explicitly indicates the
User as part of the resource name space identification on the server or,
in URI terms, of the authority.  If we move towards peer-to-peer HTTP
service, this is going to behelpful for routing requests,
perhaps in combination with encrypted portions in the initial TLS messages.This extension to HTTP is straightforward, and it has been implemented
for WSGI in theWSGI_Userclass.  This reads theUserheader,
removes%-escapes, applies a syntax check that defaults to theNAI syntaxwith a default-on option to also allow empty strings, and if it
matches, passes the value in aLOCAL_USERenvironment variable
and will signal the impact on caching by adding aVary: Userresponse header.By default, WSGI-User implements backward compatibility with two
older habits:Basic authentication with a username and empty passwordLocal server convention for/~usernamepathsBoth are a bit cluttered in comparison to theUserheader.
Basic authentication conflates client and server identities and
invalidates intermediate caching; local server conventions do not
permit inferencing in clients or by their human users (and makes
them resort to inconsistent, deductive reasoning).Current status:The code performs well in our test programs.
Please try it live and report to us!Bring Your Own IDentityWe are considering a BYOID mechanism based on Diameter servers
hosted under domain names.  This is not a web-only technology,
so we are not limited to HTTP and can make a choice for a more
dedicated technology.Diameter is the sequel to RADIUS; its security is better so it
can be used for such realm crossover purposes; indeed, there
are SRV records in DNS for this kind of purpose.  Diameter's
support for bulk interactions and routing of requests and
responses has also improved.  Finally, it is easier to extend
with notions such as SASL fields.With this in mind, a server receiving a client identityjohn@example.comcan lookup the Diameter server forexample.comand relay SASL traffic to the realm.  It does not need any local
credentials to allow for this to work; all it needs to do is use
TLS for trust in the link to the backend Diameter server.This is not the only way in which we think BYOID can be achieved.
It will me much more powerful once we get our projects for
Kerberos going:Impromptu Realm Crossover (KXOVER)andTLS-KDH.
The advantage of these mechanisms is that a crossover relation
is made between realms, not just for individual queries of
individual users.  This makes it extremely efficient for bulk
use, but it will also take longer to get established.  It is
useful though; TLS-KDH authenticates thousands of times faster
than tradition public-key certificates, and it resists
quantum computers; KXOVER currently cannot match that last point,
but will develop in that direction too.
SASL is the short-term solution that can integrate seemlessly
with this same approach.ARPA2 Access ControlThe ACL setup that we envision is flexible, generic and fast.  More
importantly, it is suitable for realm crossover uses.We arebuilding librariesto support the general evaluation of this model, along withchange subscriptionto keep dependents informed.