1

私は CustomMembership Provider を実装しており、最初の部分は機能し、ログイン、登録などを行います(http://msdn.microsoft.com/en-us/library/vstudio/w8h3skw9( v=vs.100).aspx )。

私の Web.Config:

<system.web>
    <machineKey validationKey="32E35872597989D14CC1D5D9F5B1E94238D0EE32CF10AA2D2059533DF6035F4F" decryptionKey="B179091DBB2389B996A526DE8BCD7ACFDBCAB04EF1D085481C61496F693DF5F4"/>
    <membership defaultProvider="CustomMembershipProvider">
      <providers>
        <clear />
        <add name="CustomMembershipProvider" type="CustomMembership.CustomMembership.CustomMembershipProvider" connectionStringName="TestMembershipEntities" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" passwordFormat="Encrypted" />
      </providers>
    </membership>
    <roleManager enabled="true" defaultProvider="CustomRoleProvider">
      <providers>
        ...

今、私は MD5 を使用する必要があります。

MachineKey に検証属性を設定すると、メソッドEncryptPasswordは正しいアルゴリズムを選択しますか?

switch (PasswordFormat)
{
    case MembershipPasswordFormat.Clear:
        break;
    case MembershipPasswordFormat.Encrypted:
        byte[] encryptedPass = EncryptPassword(Encoding.Unicode.GetBytes(password));
        encodedPassword = Convert.ToBase64String(encryptedPass);
        break;
    case MembershipPasswordFormat.Hashed:
        HMACSHA1 hash = new HMACSHA1();
        hash.Key = HexToByte(machineKey.ValidationKey);
        encodedPassword =     Convert.ToBase64String(hash.ComputeHash(Encoding.Unicode.GetBytes(password)));
        break;
    default:
        throw new ProviderException("Unsupported password format.");
}

マシン キーの変更

<machineKey validationKey="32E35872597989D14CC1D5D9F5B1E94238D0EE32CF10AA2D2059533DF6035F4F" decryptionKey="B179091DBB2389B996A526DE8BCD7ACFDBCAB04EF1D085481C61496F693DF5F4" 
validation="MD5"  decryption="Auto" />

それを行うと、次のエラーが表示され@Html.AntiForgeryToken()ます:

**ConfigurationErrorsException was unhandled...**
When using <machineKey compatibilityMode="Framework45" /> or the MachineKey.Protect and MachineKey.Unprotect APIs,
the 'validation' attribute must be one of these values: SHA1, HMACSHA256, HMACSHA384, HMACSHA512, or alg:[KeyedHashAlgorithm].

MD5を暗号化/復号化するためのカスタムコードを書く必要があるcase MembershipPasswordFormat.Encrypted:か、または私がする必要があること、ありがとう。

4

3 に答える 3

2

このブログでは、次のように説明しています。

4.5 コード パスのオプトインまたはオプトアウト

ご想像のとおり、暗号化パイプラインに対するこのような大幅な変更は、互換性を犠牲にして行われます。また、.NET 4.5 は .NET 4 のインプレース アップデートであるため、これらの新しい動作をデフォルトで有効にすることはできません。そうしないと、既存のアプリケーションが壊れるという許容できないリスクが発生します。

新しい ASP.NET 4.5 の動作を選択するには、Web.config で次のように設定するだけです。

<machineKey compatibilityMode="Framework45" />

または、次のスイッチを設定することもできます。これは、ASP.NET 4.5 プロジェクト テンプレートが行うことです。

上記のスイッチは、実行時の動作の多くの変更に関与していますが、それは別の日のブログ投稿です. ここで重要なのは、要素でターゲット フレームワークを 4.5 に設定すると、マシン キー互換モードが明示的に指定されていない限り、互換モードのデフォルト設定が Framework45 に自動的に設定されることです。

ASP.NET はこれまで、異なるバージョンのフレームワーク間でのフォーム認証チケットの共有をサポートしてきました。これにより、たとえば、ASP.NET 2.0 を実行するアプリケーションでチケットを生成し、ASP.NET 4 を実行するアプリケーションでチケットを検証できます。ASP.NET 4.5 を対象とするアプリケーション ( を設定した) を作成していて、以前のバージョンの ASP.NET を実行しているアプリケーションとチケットを共有する必要がある場合は、4.5 プロジェクトの Web.config で次のように設定する必要があります。

値 Framework20SP1 は、すべての ASP.NET バージョンの既定のマシン キー互換モードです。これには、マシンに .NET 4.5 がインストールされている場合でも、従来の暗号コード パスを使用する効果があります。4.5 がインストールされたマシンでたまたま実行されている既存の ASP.NET 4 アプリケーションは、そのアプリケーションの Web.config にも存在しないため、新しい動作を自動的に取得しません。ただし、4.5 をターゲットとする新しいアプリケーションを作成し (そのため、それらの構成設定を持っている)、既存のアプリケーションとのフォーム認証チケットの互換性を維持する必要がある場合は、Framework20SP1 を以前のバージョンの ASP.NET と相互運用できるように設定できます。

http://blogs.msdn.com/b/webdev/archive/2012/10/23/cryptographic-improvements-in-asp-net-4-5-pt-2.aspx

于 2014-04-24T13:34:33.323 に答える
1

試す:

 <machineKey compatibilityMode="Framework20SP2".... 

注: これは、compatibilityMode では小文字の "c" です。

可能な値は、compatibilityMode プロパティに次のとおりです。Framework20SP1、Framework20SP2、Framework45

参照: http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode(v=vs.110).aspx

于 2014-06-18T09:00:56.603 に答える
0

マシン キー タグを更新して、次を追加します ( MSDN )。

<machineKey compatibilityMode="Framework20SP1".... />

注:compatibilityMode の小文字の「c」

しかし、真剣に言えば、MD5 は非常に脆弱なアルゴリズムであり、可能であれば使用をやめて、より安全な暗号化方式を使用してください。これが、新しい .NET フレームワークで有効な暗号化アルゴリズムとして削除された理由の 1 つです。

于 2013-08-29T18:34:58.920 に答える