Ignorer les commandes du Ruban
Passer au contenu principal

Le blog d'Alexandre GIRAUD MVP Forefront

:

Alexandre GIRAUD - MVP Forefront > Le blog d'Alexandre GIRAUD MVP Forefront > Messages > Vérification des DeviceID lors d’une synchro ActiveSync
juin 03
Vérification des DeviceID lors d’une synchro ActiveSync

Depuis Exchange 2007, il est possible de vérifier les DeviceID des périphériques mobiles afin d'autoriser ou non la connexion. Ceci avait pour effet de limiter les synchro ActiveSync uniquement pour les périphériques connus de l'entreprise. Mais Quid avec une infra Exchange 2003 ? Et si on trouver une solution pour faire cette vérification sur la bordure externe avant de pénétrer le réseau interne ? …

Nous allons donc expliquer à travers ce billet, comment effectuer une authentification et une vérification des DeviceId directement en externe avec IAG 2007.

Tout d'abord on va créer un portail de type webmail avec ActiveSync et suivre l'assistant normalement. Je ferais plus tard un article plus complet sur la configuration ActiveSync J

Pour avoir plus d'infos sur la publication ActiveSync pour l'instant se rendre sur le Blog IAG Edge Access :

Cependant, je déconseille de modifier directement le fichier ActiveSyncLogin.asp décrit dans l'étape 9 du premier lien car, si une mise à jour IAG devait être effectuée. Cette modification sera remplacée par un nouveau fichier. La connexion ne se fera donc plus. Je préconise l'utilisation d'un fichier Hook qui ne sera pas affecté par les mises à jour IAG.

Cette modification consiste à créer un fichier <%TRUNK_NAME%><0/1>ActiveSyncLoginStart.inc dans le dossier \whale-com\e-gap\von\InternalSite\CustomUpdate. Le nom du fichier devra être changé en fonction du nom du portail et du type de publication (http ou https). Si le portail est en http il faudra mettre 0, et si en SSL ce sera 1. Concernant le nom du portail c'est celui que l'on indique lors de sa création. Donc si j'ai un portail SSL qui a pour nom ACTIVESYNC, le fichier aura pour nom « activesync1ActiveSyncLoginStart.inc » !

Par exemple si nous avions choisi « ADCERT » comme nom de fournisseur d'authentification

Alors nous rajouterons <% repository = "ADCERT" %> dans le fichier <%TRUNK_NAME%>1ActiveSyncLoginStart.asp

A présent la connexion ActiveSync devrait fonctionner depuis un mobile correctement configuré !

 

Maintenant le but du jeu est de permettre de vérifier le DeviceID, lors de la connexion ActiveSync, afin de vérifier si le périphérique est autorisé. Dans les exemples que je vais donner ci-après, nous allons utiliser une base de données de type texte mais cela peut-être améliorer très largement. On pourrait par exemple directement requête un champ ActiveDirectory, une base SQL, Exchange 2007, …

Si l'utilisateur n'a pas le DeviceID de renseigner dans la base correspondant il peut obtenir un message personnalisé

Le script expliqué plus loin consistera à créer deux fichiers de logs dans le dossier C:\Whale-Com\e-Gap\von\InternalSite\inc\CustomUpdate\ACTIVESYNC. Le dossier et les fichiers seront crées automatiquement en cas d'absence.

  • activesync_database.txt : Ce fichier contiendra les numéros de DeviceID autorisé à se connecter. Le fichier sera tabulé avec un DeviceID par ligne.
  • activesync_error.txt : Ce fichier contiendra les informations de connexions échouées. Il permettra à l'administrateur voulant autoriser un nouveau périphérique de s'aider de ce fichier pour faire un copier/coller vers le fichier de base de données. Et oui l'informatique c'est bien pour les feignants J !

Ensuite il nous faut trouver les informations de DeviceId et autres informations éventuelles. Il faut savoir que lors d'une connexion ActiveSync, le mobile présente de nombreuses informations dans la requête http à l'aide de valeurs GET. Analysons dont une trame :

Lors de la connexion, nous allons récupérer les éléments à l'aide de la chaine url. Cependant si nous utilisons des requêtes de type Request.ServerVariables( "ALL_HTTP" ), nous ne verrons que la requête proxifiée d'IAG et non la requête initiale. Mais IAG utilise une variable «orig_url » qui est la chaine de l'url initiale effectuée par le client. En splittant les différents éléments, il sera donc possible de récupérer les variables user, DeviceId, DeviceType, etc…

Inutile d'en dire plus, voilà le code à utiliser. Le code est assez documenté et de nombreuses traces afin de pouvoir troobleshooter facilement. N'hésitez pas à me contacter.

<%
' GIRAUD Alexandre Custom ActiveSync Start
repository = "ADCERT"

' Informations sur la requête SSL
LIGHT_TRACE "TRACE ActiveSync orig_url:["& orig_url &"]"
LIGHT_TRACE "TRACE ActiveSync ALL_HTTP:["& Request.ServerVariables( "ALL_HTTP" ) &"]"
LIGHT_TRACE "TRACE ActiveSync QUERY_STRING:["& Request.ServerVariables( "QUERY_STRING" ) &"]"
LIGHT_TRACE "TRACE ActiveSync URL:["& Request.ServerVariables( "URL" ) &"]"

' Récupération du DeviceId
LIGHT_TRACE "TRACE ActiveSync : Début Script Get DeviceId"
n = 0
variables_url = Split(orig_url,"?")
variables_unique = Split(variables_url(1),"&")
For Each Item in variables_unique
    variable_string = Split(variables_unique(n),"=")
    Select Case variable_string(0)
        Case "User":
            LIGHT_TRACE "TRACE ActiveSync User:["& variable_string(1) &"]"
            user = variable_string(1)
        Case "DeviceId":
            LIGHT_TRACE "TRACE ActiveSync DeviceId:["& variable_string(1) &"]"
            DeviceId = variable_string(1)
        Case "DeviceType":
            LIGHT_TRACE "TRACE ActiveSync DeviceType:["& variable_string(1) &"]"
            DeviceType = variable_string(1)
        Case Else
            LIGHT_TRACE "TRACE ActiveSync "& variable_string(0) &":["& variable_string(1) &"]"
    End Select
    n = n + 1
Next
set n = nothing
LIGHT_TRACE "TRACE ActiveSync : Fin Script DeviceId"

' Recherche et comparaison DeviceId
LIGHT_TRACE "TRACE ActiveSync : Début script comparaison DeviceId"
dim fs,errorlog,database,find
set fs=Server.CreateObject("Scripting.FileSystemObject")
if fs.FolderExists("C:\Whale-Com\e-Gap\von\InternalSite\inc\CustomUpdate\ACTIVESYNC") = false then
    fs.CreateFolder("C:\Whale-Com\e-Gap\von\InternalSite\inc\CustomUpdate\ACTIVESYNC")
    LIGHT_TRACE "TRACE ActiveSync : Création du dossier ACTIVESYNC"
else
    LIGHT_TRACE "TRACE ActiveSync : Le dossier ACTIVESYNC existe déjà"
end if
if fs.FileExists("C:\Whale-Com\e-Gap\von\InternalSite\inc\CustomUpdate\ACTIVESYNC\activesync_error.txt") = false then
    set errorlog=fs.CreateTextFile("C:\Whale-Com\e-Gap\von\InternalSite\inc\CustomUpdate\ACTIVESYNC\activesync_error.txt",false)
    LIGHT_TRACE "TRACE ActiveSync : Création du fichier d'erreur ActiveSync"
else
    LIGHT_TRACE "TRACE ActiveSync : Le fichier d'erreur ActiveSync existe déjà"
end if
if fs.FileExists("C:\Whale-Com\e-Gap\von\InternalSite\inc\CustomUpdate\ACTIVESYNC\activesync_database.txt") = false then
    set database=fs.CreateTextFile("C:\Whale-Com\e-Gap\von\InternalSite\inc\CustomUpdate\ACTIVESYNC\activesync_database.txt",false)
    LIGHT_TRACE "TRACE ActiveSync : Création du fichier de base de données DeviceID"
else
    LIGHT_TRACE "TRACE ActiveSync : Le fichier de base de données DeviceId existe déjà"
end if

' Vérification des DeviceId par recherche dans la DB
LIGHT_TRACE "TRACE ActiveSync : Lecture du fichier de base de données"
set database=fs.OpenTextFile("C:\Whale-Com\e-Gap\von\InternalSite\inc\CustomUpdate\ACTIVESYNC\activesync_database.txt",1)
find = 0
LIGHT_TRACE "TRACE ActiveSync : Lecture ligne / ligne pour comparaison"
Do until database.AtEndOfStream
    line = database.ReadLine
    DeviceId_search = Split(line,vbTab)
    if DeviceId_search(0) = DeviceId then
        LIGHT_TRACE "TRACE ActiveSync : Le DeviceId ["& DeviceId &"] pour l'utilisateur :["& user &"] a été trouvée dans la base de données"
        find = 1
        Exit Do
    else
        LIGHT_TRACE "TRACE ActiveSync : La comparaison de ["& DeviceId &"] a échouée avec celle en cours ["& DeviceId_search(0) &"]"
    end if
Loop

' Si aucune correspondance n'a été trouvée alors écriture dans le fichier de log
LIGHT_TRACE "TRACE ActiveSync : Vérification de l'erreur find=["& find &"]"
if find = 0 then
    LIGHT_TRACE "TRACE ActiveSync : Aucune correspondance DeviceId trouvée"
    set errorlog=fs.OpenTextFile("C:\Whale-Com\e-Gap\von\InternalSite\inc\CustomUpdate\ACTIVESYNC\activesync_error.txt",8)
    errorlog.WriteLine(DeviceId & vbTab & user & vbTab & DeviceType & vbTab & Now)
    errorlog.Close
    set errorlog=nothing
    set find = nothing
    LIGHT_TRACE "TRACE ActiveSync : Fermeture de la session pour accès refusé"
    response.Write "Vous n'avez pas l'autorisation de synchroniser cet appareil.<br>Merci de contacter l'administrateur de votre entreprise"
    response.End
end if

LIGHT_TRACE "TRACE ActiveSync : Fermeture des variables"
database.Close
set database = nothing
set fs=nothing
LIGHT_TRACE "TRACE ActiveSync : Fin Script comparaison DeviceId"

' GIRAUD Alexandre Custom ActiveSync End

%>

 

Commentaires

génération device ID

Vérifier le device ID pour une connexion ActiveSync est intéressant, cependant comment créer une base ou provisionner l'AD avec les device ID des terminaux autorisés ???? En effet ce device id est généré.. à la première tentative de synchronisation...
 Y-a-til un moyen de connaitre en avance de phase ce device ID ?
 sur 24/06/2010 12:03

Ajouter un commentaire

Le contenu des éléments de cette liste doit être approuvé. Votre envoi n'apparaîtra pas dans des vues publiques tant qu'il n'aura pas été approuvé par une personne qui dispose des droits appropriés. Plus d'informations sur l'approbation du contenu.

Surnom


Titre


Corps *


Pièces jointes