After reading the RFCs, it seems like we should decide:
1) all http interactions MUST be HTTP 1.1
2) servers MUST conform to RFC2617 for returning one or more authentication schemes in their 401 challenge. These define the authentication interactions that the server is willing to accept from the client -- e.g., Basic authentication, Digest, Negotiate (for e.g., Kerberos).
3) any server interactions MAY be unauthenticated
4) non-device (e.g., browser) interactions for which the server requires authentication MAY NOT support the OpenRosa Restricted Digest authentication scheme. e.g., they are allowed to only support Basic or some other authentication scheme.
5) device-and-server interactions for which the server requires authentication MUST implement the OpenRosa Restricted Digest authentication scheme as detailed below.
6) device-and-server interactions for which the server requires authentication MAY implement other authentication schemes
7) the device MUST make every effort to proactively supply an Authentication: header line if the requested URI falls within the list of domain URIs covered by a previous authentication interaction. This is to minimize the number of authentication challenges.
OpenRosa Restricted Digest authentication:
This is the Digest Access Authentication Scheme (RFC 2617 Section 3) constructed as a challenge with the following restrictions in that scheme request:
a) algorithm -- server MUST omit or specify "MD5"
b) domain -- server MUST specify to help device with proactive inclusion of Authenticate: header records.
b) qop -- device MUST support all of: omitted, "auth", or "auth-int" ; server MAY request any of these
c) opaque -- device MUST return if supplied; server MAY supply this or omit it
d) stale -- device MUST make every effort to not prompt the user for username and password if this is TRUE but instead recompute the key with previously cached values for the username and password.
e) cnonce -- device MUST use a string representation of a random UUID for the cnonce. I'm defining this largely so devices don't do something stupid like a compiled-in, fixed, string. This random UUID only needs to be generated once at program start-up, if that makes the code easier.
Mitch
http://www.OpenDataKit.orgUniversity of Washington
msu...@cs.washington.edu