Je suis de la conception d'un site web qui sera un compagnon mobile (initally iPhone uniquement). Le site web sera un ASP.Net MVC 3 application. Je vais aussi avoir un ASP.Net l'API Web site (MVC 4) pour exposer les services de l'application iPhone. L'application iPhone a son propre formulaire de capture nom d'utilisateur et le mot de passe de l'utilisateur et l'envoyer sur le web API JSON-têtes.
Je veux considérer la sécurité dès le début plutôt qu'après avoir pensé. Je ne suis pas un expert en sécurité par tous les moyens. J'ai fait beaucoup de recherches pour voir comment les autres sont de la gestion de l'authentification d'une application mobile de client à partir d'un service web. Je pense que je suis venu avec une solution décente qui n'implique pas de se connecter à des tiers oAuths.
Je vous serais très reconnaissant de tout et de tous les avis, conseils, critiques et général WTFs que vous pouvez offrir. :)
Mon plus gros soucis sont:
- Veiller à ce que les appels effectués à l'API web sont autorisés
- En minimisant le risque d'attaques récurrentes (d'où les horodateurs dans les appels ci-dessous)
L'application iPhone sera développée en tant que telle:
Deux chaînes de caractères sont codés en dur dans l'application iPhone (même valeurs pour chaque utilisateur):
-
ID de l'Application
C'est une chaîne de caractères qui est utilisé pour identifier le type de client qui accède au web API (iPhone, Android, Windows phone, etc). -
L'Application de Hachage de Sel
C'est une chaîne de caractères qui est utilisé pour le sel hachages pour l'utilisateur agnostique demandes.
Deux chaînes de caractères sont stockées dans l'iPhone de l'application locale de la base de données (valeurs uniques pour chaque utilisateur):
-
API Jeton d'Accès Utilisateur
C'est une chaîne de caractères (token) fournis au client par l'API web sur la réussite de l'authentification et permet au client d'accéder à l'API de web sans l'envoi du nom d'utilisateur et le mot de passe à chaque demande. -
L'utilisateur du Hachage de Sel
C'est une chaîne de caractères qui est utilisé pour le sel de hachages pour les demandes faites à l'encontre des comptes d'utilisateur.
L'iPhone va faire des appels à l'API web de la manière suivante:
Méthode de l'API: Créer un Compte
Client Envoie:
- De nouvelles Données de Compte (nom d'utilisateur, Mot de passe, prénom, Nom, etc..)
- ID de l'Application
- Horodatage UTC
- Hachage de Horodatage UTC + ID de l'Application salé avec l'Application de Hachage de Sel
API Retourne:
- Nouvel Utilisateur de Hachage de Sel
L'idée ici est que, lors de la création d'un compte, je peux utiliser l'application est codée en dur de sel, car il n'est pas un énorme risque de sécurité si le sel que jamais obtenu (grâce à la décompilation ou autre).
Mais pour les méthodes d'accès et modifier les données de l'utilisateur, je vais utiliser un sel qui est détenue uniquement par l'utilisateur de sorte qu'il ne peut pas être utilisé par un attaquant d'usurper l'identité d'autres.
Méthode de l'API: Obtenir Compte
(Utilisé pour l'obtention de l'utilisateur de hachage de sel pour les comptes qui ont été créés sur le site web, mais qui n'ont pas encore été synchronisés sur l'iPhone. Cela se produit lorsqu'un utilisateur essaie d'ouvrir une session sur l'iPhone et l'iPhone détecte qu'il n'a pas de dossier pour que le nom d'utilisateur.)
Client Envoie:
- Nom d'utilisateur
- Mot de passe (hachés avec l'Application de Hachage de Sel)
- ID de l'Application
- Horodatage UTC
- Hachage de Horodatage UTC + ID de l'Application salé avec l'Application de Hachage de Sel
API Retourne:
- Utilisateur existant de Hachage de Sel
Méthode de l'API: connectez-vous (Authentifier)
Client Envoie:
- Nom d'utilisateur
- Mot de passe (hachés avec de l'Utilisateur de Hachage de Sel)
- ID de l'Application
- Horodatage UTC
- Hachage de Horodatage UTC + ID de l'Application salé avec de l'Utilisateur de Hachage de Sel
API Retourne:
- API Jeton d'Accès Utilisateur
Méthode de l'API: Toute Commande (c'est à dire Créer de Poste, mise à Jour de Profil, Obtenez des Messages, etc...)
Client Envoie:
- Les Données De La Commande
- API Jeton d'Accès Utilisateur
- ID de l'Application
- Horodatage UTC
- Hachage de Horodatage UTC + ID de l'Application + API Jeton d'Accès Utilisateur salé avec de l'Utilisateur de Hachage de Sel