Geçenlerde bu konuda koştu Tek bir sunucuda birden çok dağıtılmış IIS sitesiyle (Windows 2008 R2). Çevremizdeki her site farklı uygulama havuzlarında çalışıyor, ancak bazı durumlarda bu havuzlar aynı kimliğe sahip olabilir.
Uygulamamız mevcut değilse bir anahtar oluşturur ve mevcut kimliğe dayalı bir ada sahip bir kapsayıcıya yerleştirir. İlk dağıtılan site her zaman işe yaradı, ancak başka bir siteyi aynı kimliğe sahip başka bir uygulama havuzuna dağıttığımızda ikincisi başarısız olur.
Anahtar depolandığında Windows, havuza atadığımız kimliği değil, "IIS APPPOOL \ AppPoolName" kullanıcısına tam erişim sağlar.
Yani, bizim çözüm konteynerin akım kimliğine açık izinler vermekti (bu @ WebMixer cevabı benzer, tek fark CryptoKeyAccessRule
olan): Ben beri
CspParameters cspParams;
cspParams = new CspParameters(PROVIDER_RSA_FULL);
cspParams.KeyContainerName = CONTAINER_NAME;
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
cspParams.ProviderName = "Microsoft Strong Cryptographic Provider";
CryptoKeyAccessRule rule = new CryptoKeyAccessRule(System.Security.Principal.WindowsIdentity.GetCurrent(), CryptoKeyRights.FullControl, AccessControlType.Allow);
cspParams.CryptoKeySecurity = new CryptoKeySecurity();
cspParams.CryptoKeySecurity.SetAccessRule(rule);
uygulanmaz Mayıs Aynı kodu iki farklı projede, ancak aynı kullanıcı hesabı altında çalıştırarak. – LamonteCristo
Windows XP konumu bu mu? "C: \ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys" Bence Vista (ve yukarı) konumdur. – granadaCoder