web-dev-qa-db-ja.com

Azure WebサイトでmachineKeyを設定する方法

Azure Webサイトを実行しています。 machineKeyが変更されるため、私が展開するときはいつでも、全員がログアウトされます。

web.configmachineKeyを指定しましたが、これで問題が解決しませんでした。これは、AzureがmachineKey[1] を自動的に上書きするためだと思います。

ここで同様の質問をいくつか見つけましたが、回答はデッドリンクにリンクしています。

それで、解決策は何ですか?確かに、Azureへのデプロイに関係なく、ユーザーをログイン状態に保つ方法はあります。

28
Mr. Flibble

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>

ただし、実際の値は、任意の構成ソースからロードできます。

18
haim770

AzureがmachineKeyを書き換えている場合は、それがインフラストラクチャの一部であるため、それについて多くのことを行うことはできません。ただし、他の方法もあります。

FormsAuthenticationを上書きする

FormsAuthenticationのソースコードを簡単に検索して独自のロジックを作成し、MachineKeyをweb.configまたはデータベースに格納されている独自のキーに置き換えることができるため、これは難しくありません。

カスタム認証フィルター

最も簡単な方法は、フィルターを作成し、フィルターで復号化Cookieを確認、検証、暗号化することです。 OnAuthorizationメソッドでこれを行い、IPrincipalの新しいインスタンスを作成し、暗号解読が成功した場合はIsAuthenticatedをtrueに設定する必要があります。

OAuth

  1. OAuthを有効にしてOAuthProviderを作成します。ただし、machineKeyが機能する必要があるため、制御下にあるサーバーでOAuthProviderをホストする必要があります。
  2. サードパーティのOAuthを有効にします。OAuthを有効にすると、ユーザーはOAuthプロバイダーにリダイレクトされ、彼らは継続します。自動的にログインすると、新しいセッションが確立されます。
1
Akash Kava

同じ問題があり、私の場合はVS13でwebdeploy to Azureウィザードを使用していました。 web.configでmachinekeyを設定し、デプロイされたweb.configで変更されて自動生成されるので、私は夢中になると思いました。これは、webdeployスクリプト/設定に含まれています。私の解決策は、サーバーエクスプローラーを使用してVS13内からライブAzureサイトを開き、web.configを編集して変更を保存することでした。これにより、提供されたキーで私の設定が保持され、すべて正常に動作しました。

0
Kent Strong