0

1 つは MVC で、もう 1 つは Web フォームで、2 つの Web アプリケーションを作成します。ASP.NET および MVC で利用可能な組み込みの認証システムを使用するべきか、独自のカスタム認証システムを作成するべきかについて混乱しています。AccountController暗号化されたパスワード ストレージなどを使用して独自のものを作成するように。

私が知る必要があるのは、組み込み認証を使用する方が理にかなっているのかどうかです。そうでない場合、このために独自のパスワードを作成する際に、暗号化されたパスワードなど、どのようなことを考慮する必要がありますControllerか?

4

2 に答える 2

1

ASP.NET Identity 2は MVC と WebForm の両方で使用できますが、学習曲線が急です。

無料の Adam Freeman の本から ASP.NET IDを読むことができます。

ASP.NET Identity 2 が多すぎると思われる場合は、FormAuthentiationを使用できます。

参考までに:独自の暗号化アルゴリズムを実装しないことを強くお勧めします。暗号化アルゴリズムを作成するには、多くのスキルとテストが必要です。

ASP.NET ユニバーサル プロバイダーで使用されるパスワード ハッシュ アルゴリズム

private static string GenerateSalt()
{
    byte[] numArray = new byte[16];
    (new RNGCryptoServiceProvider()).GetBytes(numArray);
    string base64String = Convert.ToBase64String(numArray);
    return base64String;
}

private string EncodePassword(string pass, int passwordFormat, string salt)
{
    byte[] numArray;
    byte[] numArray1;
    string base64String;
    bool length = passwordFormat != 0;
    if (length)
    {
        byte[] bytes = Encoding.Unicode.GetBytes(pass);
        byte[] numArray2 = Convert.FromBase64String(salt);
        byte[] numArray3 = null;

        HashAlgorithm hashAlgorithm = HashAlgorithm.Create("SHA1");

        if (hashAlgorithm as KeyedHashAlgorithm == null)
        {
            numArray1 = new byte[(int) numArray2.Length + (int) bytes.Length];
            Buffer.BlockCopy(numArray2, 0, numArray1, 0, (int) numArray2.Length);
            Buffer.BlockCopy(bytes, 0, numArray1, (int) numArray2.Length, (int) bytes.Length);
            numArray3 = hashAlgorithm.ComputeHash(numArray1);
        }
        else
        {
            KeyedHashAlgorithm keyedHashAlgorithm = (KeyedHashAlgorithm) hashAlgorithm;
            if (keyedHashAlgorithm.Key.Length != numArray2.Length)
            {

                if (keyedHashAlgorithm.Key.Length >= (int) numArray2.Length)
                {
                    numArray = new byte[(int) keyedHashAlgorithm.Key.Length];
                    int num = 0;
                    while (true)
                    {
                        length = num < (int) numArray.Length;
                        if (!length)
                        {
                            break;
                        }
                        int num1 = Math.Min((int) numArray2.Length, (int) numArray.Length - num);
                        Buffer.BlockCopy(numArray2, 0, numArray, num, num1);
                        num = num + num1;
                    }
                    keyedHashAlgorithm.Key = numArray;
                }
                else
                {
                    numArray = new byte[(int) keyedHashAlgorithm.Key.Length];
                    Buffer.BlockCopy(numArray2, 0, numArray, 0, (int) numArray.Length);
                    keyedHashAlgorithm.Key = numArray;
                }
            }
            else
            {
                keyedHashAlgorithm.Key = numArray2;
            }
            numArray3 = keyedHashAlgorithm.ComputeHash(bytes);
        }

        base64String = Convert.ToBase64String(numArray3);
    }
    else
    {
        base64String = pass;
    }
    return base64String;
}
于 2015-06-03T21:11:42.387 に答える
0

@Heemanshu Bhalla: これは最終的には設計の問題であるため、正解はありません。正確な要件によって異なります。ただし、自問すべき質問がいくつかあります。

  • サードパーティ認証 (Facebook や Twitter などの OAuth 経由など) をサポートする必要がありますか?
  • 2 要素認証 (SMS や電子メールの検証など) を提供する必要がありますか?
  • これは Entity Framework アプリケーションと統合されますか?
  • 将来、外部クライアント (モバイルなど) に認証を提供する必要がありますか?

@Win が指摘しているように、独自の認証または暗号化システムを作成することは絶対に避けます。とはいえ、上記の質問のいずれかに対する答えが「はい」の場合、組み込みのASP.NET Identity 2を強く検討します。はい、@Win が言うように、それは急な学習曲線ですが、:

  • Visual Studio プロジェクト テンプレートを使用して、基本的なセットアップをスキャフォールディングできます。
  • 後でより高度な機能が必要になった場合に備えて、強力な基盤を提供します。
  • 従来のフォーム ベース認証は習得が容易ですが、事実上非推奨です。

すぐに使用できる基本的な機能に満足しており、プロジェクト内の事前にスキャフォールディングされたコードの多くが気にならない場合は、Visual Studio プロジェクト テンプレートの要点を理解するのは難しくありません。とはいえ、完全に理解し、特により詳細なカスタマイズを提供するには、忍耐とコミットメントが必要です。

于 2015-06-03T21:24:05.110 に答える