Estoy proponiendo este esquema para la autenticación federada y WebCrypto. No estoy seguro de si existe algo como esto (o mejor), envíenme material relacionado.
Entidades
- Navegador de Alicia, NAVEGADOR
- servidor de Bob, BOB
- servidor de Alicia, ALICE
Fondo
Las identidades son nombres de dominio y cada servidor tiene una lista de control de acceso en cada recurso.
- Bob escribe en el archivo de control de acceso "alice.com" que puede leer "/ foo"
- Alice quiere leer foo
Protocolo
tl; versión de dr:
- El Navegador de Alicia intenta acceder a un recurso en el servidor de Bob, Bob responde con un mensaje no autorizado y un nonce
- Alice genera una clave en su navegador con webcrypto y la guarda en la memoria
- Alice carga su clave en su sitio web
- Alice firma el nonce, la dirección del servidor bob y la dirección de su clave
- Bob recibe el mensaje y comprueba si la ubicación que alicia mencionó tiene la clave pública que verifica la firma
Diagrama
1. Alice's Browser tries to access a resource on Bob's server
BROWSER -------------- GET /foo ----------------------> BOB
BROWSER <------------- RESPONSE 401 {nonce} ----------- BOB
2. BROWSER uses WebCrypto to generate Pub/Priv key pair
3. Alice's post her new key on her server
BROWSER -------------- POST /keys/nonce --------------> ALICE
{ Pub }
BROWSER <------------- RESPONSE 200 ------------------- ALICE
4. Alice's Browser signs the location of the key, the nonce and
the Bob's Server origin
BROWSER -------------- POST /foo ---------------------> BOB
Sign(location, nonce, bob)
5. Bob's server gets the advertised location
BOB -------------- GET /keys/nonce ---------------> ALICE
BOB <------------- RESPONSE {Pub} ----------------- ALICE
6. Bob's server verifies the signature
BROWSER <------------- RESPONSE 200 ------------------- BOB
{set cookie}
Preguntas
- ¿Hay algún escollo que no esté viendo?
- ¿Puede ocurrir algún ataque en el punto # 4 del diagrama?
- ¿Existe este esquema o tiene un nombre?