Ciao,
Io mi sono fatto una cosa del genere:
Sul server tengo un file xml che contiene un numero di versione e i file da scaricare e sostituire. Lato client invece c'è un altro file xml che ha solo il numero di versione. Quando il programma parte scarica l'xml dal server e compara la versione con la propria, se è più recente scarica i file da aggiornare.
Ho dovuto attuare una soluzione del genere perchè il server era necessariamente linux percui non avrei potuto lavorare con le classi native di .net che ti permettono di interagire con le versioni degli assembly, se hai un server windows e puoi sviluppare una piccola applicazione lato server, puoi fare in modo che il file xml contenga per ogni file la versione dell'assembly corrente, e lato client il programma confronti gli assembly locali con quelli remoti. Per quanto riguarda l'autenticazione direi che la soluzione che proponi potrebbe funzionare