web-dev-qa-db-fra.com

Authentification mobile à l'aide de QR dans une application Web

J'ai des doutes sur le schéma à utiliser pour la solution technique suivante ..__ Je dois authentifier un utilisateur dans une application mobile en lisant un code QR, l'utilisateur ayant déjà été authentifié dans une application Web.

Le cas d'utilisation consiste en ce que l'utilisateur utilise une application Web située sur un intranet, mais doit pouvoir télécharger des images à partir d'un appareil mobile qui sera connecté à Internet ..__ L'application mobile utilisera une API publique exposée le Internet via une passerelle API ........ La passerelle API se connecte au serveur pour télécharger les images .___ Si l'utilisateur doit utiliser l'appareil mobile pour capturer et télécharger des images, il ne doit plus s'authentifier. , puisqu'ils ont une session ouverte dans l'application Web et utilisent simplement un code QR pour authentifier le périphérique. Logiquement, le QR n'utilisera pas les informations d'identification de l'utilisateur.

Mon idée est d'utiliser Oauth 2.0 avec le flux suivant pour authentifier un appareil mobile:

  1. L'application Web demande à API Gateway de générer un jeton d'autorisation et répond avec un UUID.
  2. L'application Web affichera le jeton d'autorisation à l'aide d'une QR reçue de la passerelle API.
  3. L'appareil mobile lit le QR et demande un jeton d'accès à l'API Gateway avec le jeton d'autorisation.
  4. La passerelle API valide le jeton d'autorisation et génère le jeton d'accès renvoyé au périphérique mobile.
  5. L'appareil mobile appelle la API publique (API Gateway) à l'aide du jeton d'accès.

Ma question est de savoir si le schéma est correct ou s'il existe une autre solution standard.

Merci!!

6
jlgr

Votre système fonctionnera MAIS il n’atteindra pas son potentiel de sécurité maximum compte tenu du fait que vous pouvez transférer un nouveau jeton d’autorisation généré directement d’un périphérique déjà autorisé à un autre (via un code QR lu par la caméra); cela rendrait les étapes 3 et 4 une vulnérabilité inutile (c'est aussi une redondance, il y a déjà un jeton !, pourquoi en obtenir un autre?);

L’alternative suivante, associée à une cryptographie efficace, rend presque impossible l’interférence de la connexion de périphérique autorisée ultérieure. L’idée est qu’en ajoutant une couche de chiffrement symétrique avant d’envoyer les données à l’étape 5 et en utilisant une clé échangée sur un autre appareil et serveur), les données cryptées ne peuvent jamais être exposées;

étape 3 de remplacement: lisez le jeton d'autorisation;

Étape 4 Remplacement: vérifiez la dérivation de hachage sécurisée du jeton d’autorisation (au lieu du jeton lui-même) auprès du serveur pour voir s’il est valide;

token0=read_auth_token_from_camera()
public_token=hash_function(token0) //the useless exposed token
if(check_token_with_server_for_authenticity(public_token)==true)
    continue_to_step_5() //it's authorized
else
    handle_the_scenario()

étape 5 de remplacement: chiffrez votre demande et votre jeton d'autorisation avec une autre dérivation de hachage du jeton d'autorisation, puis appelez l'API du serveur;

token2=another_hash_function(token0)
request="i am top secret data"
encryption_key=token0
encrypted_request=encryption_function( token2 + request , encryption_key)
send_to_server( public_token+encrypted_request)
//notice that token2 is unknown to the intruder because its encrypted,but it is known to the server; hence the authenticity of each request can be checked by the server;

comment il est plus sécurisé: de cette manière alternative, le jeton d'autorisation réel n'est jamais réellement échangé entre le serveur et le nouveau client; Donc, si un intrus pouvait hypothétiquement casser la couche SSl/TLS et capturer le jeton public, l'intrus ne serait pas en mesure d'envoyer de demandes en votre nom ni de modifier les données contenues dans les demandes;

3
kamyar haqqani

Si ce schéma remplit le flux d'application souhaité, il est correct. Il n’ya pas de moyen standard d’authentifier les appareils Android si vous souhaitez vous authentifier par vous-même. 

Une chose que je pense que vous devez ajouter est une vérification du fait que le client est bien votre application Android et non une autre application utilisant un flux d'authentification similaire. Si vous pouvez répondre à cela, il est bon de partir.

2
Wijdan

Vous pouvez utiliser le kit FireBase ML pour une bonne solution et effectuer de nombreuses fonctions basées sur l'IA dans vos applications . Vous pouvez le vérifier à partir d'ici: https://firebase.google.com

0
Sujal Kumar