J'ai une application ASP.NET MVC3 C # .NET s'exécutant sur IIS 7.5.
Nous avons un compte de service Windows NT que nous empruntons dans notre code afin de lire/écrire des documents sur un partage de fichiers. L'identifiant de l'utilisateur est compilé dans le code et le mot de passe du compte de service est stocké dans le fichier web.config.
Le mot de passe contient un caractère et commercial (c'est-à-dire: p&ssword
).
Cela a cassé le site. En accédant au site, nous avons reçu l'erreur suivante: "Désolé, une erreur s'est produite lors du traitement de votre demande".
Voici le code qui utilise le mot de passe:
var password = ConfigurationManager.AppSettings.Get(Common.SVC_PWD);
bool isSuccess = LogonUser(
@"my_svc_acct",
"my.domain.net",
password,
LOGON32_LOGON_NEW_CREDENTIALS,
LOGON32_PROVIDER_DEFAULT, ref token
);
Pourquoi cela provoquerait-il la cassure du site?
Je soupçonne que vous n’avez pas correctement encodé le mot de passe dans le web.config
fichier. Rappelez-vous que web.config
est un fichier XML, les entités doivent donc être codées.
Au lieu de
my&password
essayer
my&password
Vous pouvez utiliser des sites tels que FreeFormatter.com pour échapper/libérer les chaînes XML.
Vous devrez mettre la valeur encodée dans le fichier web.config. Il le lira correctement une fois que vous l'aurez tiré, mais il devra être encodé dans le fichier de configuration lui-même.
par exemple:
Mot de passe: your&password
(ce que vous attendez)
Version encodée: your&password
(ce qui devrait être stocké dans votre web.config)
Votre méthode d'encapsulation qui lit la valeur doit la désencoder automatiquement en your&password
.
Vous devrez le faire pour tous les caractères "spéciaux":
< = <
> = >
" = "
' = '
& = &
stocker le mot de passe dans le fichier web.config à l'aide de CDATA
remplace le mot de passe par cette
<![CDATA[MyPassw&rd]]>