OSSP CVS Repository

ossp - ossp-pkg/sorp/SPEC.txt
Not logged in
[Honeypot]  [Browse]  [Directory]  [Home]  [Login
[Reports]  [Search]  [Ticket]  [Timeline
  [Raw

ossp-pkg/sorp/SPEC.txt

OSSP sorp SPECIFICATION
=======================

Mandatory Requirements
----------------------

o URL rewriting on redirects and in HTML content (hyperlinks)
  (important for full backend hiding and avoiding of by-passing traffic)

o full HTTP/1.0 and HTTP/1.1 compliant frontend service
  (important for full conformance with browser features and performance)
  => apache, squid, ??

o HTTPS/HTTP 1.0/1.1 to HTTPS/HTTP 1.0/1.1 proxy functionality for
  backend service
  (to reduce load and complexity on backends)
  => apache, squid, ??

o forwarding of client IP and HTTP/1.1 "Host:" header to backend servers
  (for correct logging and virtual hosting on backends)
  => apache mod_xxx, ??

o backend service selection based on
  - HTTP/1.1 Host header
    (for real virtual hosting on frontend)
  - URL rewriting rule (or at least URL prefix matching)
    (for seamless linking of backends into frontend URL namespace)
  - user authentication information
    (for sticky user backends, etc.)
  => apache mod_rewrite?

o user single sign-on with stickyness and automatic sign-on expiring
  (for comfortable sign-on over browser restarts and security)

o authentication via one or more of the following credentials:
  - userid+passwd
    (for standard authentication)
  - SSL client certificate
    (for elegant authentication)
  - host-based ACL
    (for by-pass authentication)

- authentication backends:
  - Kerberos Tickets?
  - LDAP?
  - SQL?
  - S/Key OTP?
  - PAM?
  - SASL?
  - Local PW

o mapping of incoming (and successfully authenticated) authentication method
  and identity to perhaps different authentication method and identity on 
  backend server communication.

o automatic session tracking in frontend service
  (for reducing complexity on backends)
  - via HTTP Cookie key "session" (read-write)
  - via URL QUERY_STRING key "session" (read-write)
  - via SSL client certificate (read-only)

o easy remote session information retrival from backend servers
  (for storing sessions on frontend only and still have on backends)

o extendable user session information set
  (for flexibility in the backends and to avoid DBs there, too)

o easy administration of user accounts (passwords!)
  and session information via Web UI
  (for obvious administration of whole setup)

o allow bookmarking of subpages by redirecting from subpage
  request to login on missing session and after loggin in again back to subpage
  (for supporting subpage bootmarking)

Optional Requirements
---------------------

o HTTPS sticky pass-through connections
  (for HTTPS on backends)

o server side include (SSI) or other dynamic content expansion
  in backend response on frontend server
  (for global navigation bars, headers, footers, etc)

o load balancing over multiple backend servers
  (for performance)

o automatic backend disabling on downtime/error if multiple backends exist

o caching of backend responses
  (for performance)

o content manipulations
  - splash screen additions
  - header/footer/css additions
  - watermark additions
  (for global services)

o pre-fetching from backend servers of inline images and referenced pages

Run-time Pseudocode
-------------------

  read client-request (CReq) from client
  create backend-request (BReq) by copying CReq
  extract request URL
  select backend URL and insert into BReq as new URL
  extract from IReq and remove from BReq authentication id
     1. from QUERY_STRING 
     2. from HTTP Cookie header
     3. from SSL client certificate

  if (URL requires authentication) {
      check authenentication id;
      if (not exists or is invalid authentication id) {
          ...
          stop;
      }
      optionally map authentication id according to backend URL
      insert (optionally mapped) authentication id into BReq as
         - QUERY_STRING addition
         - HTTP Cookie header
  }
  send BReq request to backend server
  read BRes response header from backend server
  extract response code from BReq
  filter BRes to IRes
  if (redirect) {
      inverse map Location header according to backend selection rules
  }
  if (code eq 200/OK and content-type == HTML) {
      while body is read in junks
          inverse map hyperlinks according to backend selection rules
  }
  else {
      while body is read in junks
          pass through unchanged
  }


CVSTrac 2.0.1