2009-06-10 9 views
9

J'ai une webapp où les utilisateurs peuvent créer leur compte et utiliser le service. Maintenant, je veux leur donner un domaine personnalisé où app.customer1web.com points_to myservice.com avec userid client1 une fois qu'il configure le domaine personnalisé, pour le monde, il semble que mon service fonctionne sur sa machine. De nombreux services tels que blogger, wp.com, tumblr donnent cette fonctionnalité.Comment donner le support cname au logiciel saas

Comment puis-je faire cela? J'utilise java pour écrire mon application web. Comment mapper le nom de domaine à l'ID utilisateur lorsque la requête est reçue?

Répondre

11

Comment puis-je mapper le nom de domaine à l'ID utilisateur lorsque la requête arrive?

De toute évidence, vous devrez stocker cette information quelque part, probablement dans une base de données.

  1. Ajouter une table de base de données domains avec des colonnes:

    • customerId
    • Nom
    • actif (1 ou NULL)
    • défi

    Ajouter clé unique pour (name, active) pour s'assurer qu'un nom de domaine est mappé sur une fois.

  2. Lorsqu'un client tente d'ajouter un domaine, ajoutez une ligne avec active = NULL et challenge défini sur une chaîne aléatoire. Montrez la chaîne aléatoire au client et demandez-lui d'ajouter une page Web sur le site ou de créer un enregistrement DNS factice pour vérifier la propriété du domaine (comme le fait Google Apps).

    Vous pouvez vérifier la propriété en envoyant un courrier électronique au contact administratif ou d'une autre manière.Lorsque le client dit qu'il a fait ce que vous lui avez demandé de faire à l'étape 2, vérifiez-le et définissez active = 1, challenge = NULL.

    Si le domaine était précédemment actif pour un autre client, supprimez ces enregistrements ou définissez active = 0.

  3. Demandez au client d'ajouter un enregistrement CNAME pour son domaine et de le transférer vers votre domaine, par ex. hosted.myservice.com (Google utilise ghs.google.com pour Google Apps).

  4. Lorsqu'une demande arrive, faire

    SELECT customerId FROM domains WHERE name=:requestDomain AND active=1 
    

Une meilleure façon peut être d'offrir automatiquement vos clients un domaine dans le format de <customername>.myservice.com, en plus de domaines personnalisés. Cela vous donne deux avantages:

  • Les clients qui ne wan't pas utiliser leur propre nom de domaine peut encore personnaliser leur page de connexion, par exemple avec un logo d'entreprise. Pour les domaines personnalisés, vous pouvez demander à vos clients de les transférer à <customername>.myservice.com au lieu d'un hosted.myservice.com générique.

    Cela vous permet de répartir horizontalement les clients entre plusieurs serveurs sans avoir à demander aux clients de modifier quoi que ce soit de leur côté. Par exemple, vous pouvez donner aux clients la possibilité de choisir s'ils souhaitent que leur compte soit hébergé dans l'UE ou aux États-Unis. Quand ils le changent, il suffit de transférer leurs données et mettre à jour <customername>.myservice.com. Leur domaine personnalisé fonctionnera automatiquement.

Pour ce faire, vous auriez à mettre en place un enregistrement DNS joker pour *.myservice.com (sauf si vous avez également besoin cette dernière caractéristique, auquel cas vous devrez gérer les dossiers individuels).

+0

Je pense que c'est une bonne réponse. J'ai appris quelque chose, merci, Jaka! – Upgradingdave

+1

Pourquoi devez-vous vérifier la propriété du domaine? S'ils peuvent ajouter un CNAME, n'est-ce pas une preuve suffisante? –

+0

@ ChristianDavén Vous avez besoin de la vérification CNAME! Utilisons tumblr comme exemple (ce que je crois a ce problème). La société ABC va bientôt démarrer. Ils vont lancer avec blog.ABC.com. La compagnie maléfique XYZ va sur tumblr et enregistre le blog CNAME.ABC.com pour pointer vers leur blog avant ABC. Sans vérification, quel blog devrait-il pointer? –

0

Je ne sais pas si je comprends vraiment ce que vous voulez faire mais j'essaie de vous donner une solution possible (au moins pour la partie Java de votre problème).

Une possibilité consisterait à configurer votre serveur d'applications de sorte que chaque requête soit traitée par une seule servlet (web.xml). Cette servlet peut connaître l'URL de la requête (HttpServletRequest.getRequestURI) et extraire le nom d'utilisateur. Ensuite, vous connaissez l'utilisateur et pouvez utiliser cette information pour tout ce que vous souhaitez faire. Sachez qu'il y a beaucoup de choses de DNS impliquées dans ce que vous voudriez faire! (Au moins autant que je le comprends.)

1

Une solution que vous pouvez utiliser est la configuration d'un WildCard DNS Record pour votre application, et demandez à l'application elle-même de vérifier le RequestURI pour voir quel nom d'hôte les utilisateurs utilisent.

Je sais que c'est une réponse très vague, mais il semble que l'enregistrement WildCard soit configuré, avec une seule fonction, vérifier que le nom d'hôte est votre meilleur choix. De cette façon, vous n'avez pas besoin de configurer un enregistrement DNS chaque fois qu'un client s'inscrit, et vous avez plus de temps pour faire d'autres choses ... comme ajouter de nouvelles fonctionnalités à votre application!

Questions connexes