Azure Webサイトを実行しています。 machineKey
が変更されるため、私が展開するときはいつでも、全員がログアウトされます。
web.config
でmachineKey
を指定しましたが、これで問題が解決しませんでした。これは、AzureがmachineKey
[1] を自動的に上書きするためだと思います。
ここで同様の質問をいくつか見つけましたが、回答はデッドリンクにリンクしています。
それで、解決策は何ですか?確かに、Azureへのデプロイに関係なく、ユーザーをログイン状態に保つ方法はあります。
Application_Start
でマシンキー設定セクションをリセットしてみてください:
protected void Application_Start()
{
// ...
var mksType = typeof(MachineKeySection);
var mksSection = ConfigurationManager.GetSection("system.web/machineKey") as MachineKeySection;
var resetMethod = mksType.GetMethod("Reset", BindingFlags.NonPublic | BindingFlags.Instance);
var newConfig = new MachineKeySection();
newConfig.ApplicationName = mksSection.ApplicationName;
newConfig.CompatibilityMode = mksSection.CompatibilityMode;
newConfig.DataProtectorType = mksSection.DataProtectorType;
newConfig.Validation = mksSection.Validation;
newConfig.ValidationKey = ConfigurationManager.AppSettings["MK_ValidationKey"];
newConfig.DecryptionKey = ConfigurationManager.AppSettings["MK_DecryptionKey"];
newConfig.Decryption = ConfigurationManager.AppSettings["MK_Decryption"]; // default: AES
newConfig.ValidationAlgorithm = ConfigurationManager.AppSettings["MK_ValidationAlgorithm"]; // default: SHA1
resetMethod.Invoke(mksSection, new object[] { newConfig });
}
上記は、<appSettings>
セクションに適切な値を設定することを前提としています。
<appSettings>
<add key="MK_ValidationKey" value="...08EB13BEC0E42B3F0F06B2C319B..." />
<add key="MK_DecryptionKey" value="...BB72FCE34A7B913DFC414E86BB5..." />
<add key="MK_Decryption" value="AES" />
<add key="MK_ValidationAlgorithm" value="SHA1" />
</appSettings>
ただし、実際の値は、任意の構成ソースからロードできます。
AzureがmachineKeyを書き換えている場合は、それがインフラストラクチャの一部であるため、それについて多くのことを行うことはできません。ただし、他の方法もあります。
FormsAuthenticationを上書きする
FormsAuthenticationのソースコードを簡単に検索して独自のロジックを作成し、MachineKeyをweb.configまたはデータベースに格納されている独自のキーに置き換えることができるため、これは難しくありません。
カスタム認証フィルター
最も簡単な方法は、フィルターを作成し、フィルターで復号化Cookieを確認、検証、暗号化することです。 OnAuthorizationメソッドでこれを行い、IPrincipalの新しいインスタンスを作成し、暗号解読が成功した場合はIsAuthenticatedをtrueに設定する必要があります。
OAuth
同じ問題があり、私の場合はVS13でwebdeploy to Azureウィザードを使用していました。 web.configでmachinekeyを設定し、デプロイされたweb.configで変更されて自動生成されるので、私は夢中になると思いました。これは、webdeployスクリプト/設定に含まれています。私の解決策は、サーバーエクスプローラーを使用してVS13内からライブAzureサイトを開き、web.configを編集して変更を保存することでした。これにより、提供されたキーで私の設定が保持され、すべて正常に動作しました。