4

助けてください。ASP.NET の RoleManager で暗号化された ConnectionString を使用する方法がわかりません。これは Web.config のコードです。

<connectionStrings>
    <add name="strConnectionString" connectionString="eF8w9r2UJOsk0Ps3pxmV7/Fy/xPR2hN2S7BrC1iOYNnAUaI8AqkSm5bw7r+ta4sePWSV9t/3Spnpz6wsFpvMmcppNpqM5Zk7iiDqWVgIV4k="/>    
</connectionStrings>

<roleManager enabled="true" defaultProvider="CustomizedRoleProvider">
  <providers>
    <add connectionStringName="strConnectionString" name="CustomizedRoleProvider" type="System.Web.Security.SqlRoleProvider" />
  </providers>
</roleManager>   
<membership defaultProvider="CustomizedMembershipProvider">
  <providers>
    <add connectionStringName="strConnectionString" name="CustomizedMembershipProvider" type="System.Web.Security.SqlMembershipProvider"/>
  </providers>
</membership>

プロジェクトでは、Web構成を読み取るライブラリを作成します

private const string ConnectionStringKey = "strConnectionString";
private readonly string SQLConnectionString =
   Security.DecryptString(ConfigurationManager.ConnectionStrings[ConnectionStringKey].ConnectionString);

このように ConnectionString を変更すると、動作します:

 <add name="strConnectionString" connectionString="server=My-PC\\MSSQL2008; database=MyDB; uid=sa; pwd=passw0rd;"/>

しかし、接続文字列を暗号化したいので、使用します

<add name="strConnectionString" connectionString="eF8w9r2UJOsk0Ps3pxmV7/Fy/xPR2hN2S7BrC1iOYNnAUaI8AqkSm5bw7r+ta4sePWSV9t/3Spnpz6wsFpvMmcppNpqM5Zk7iiDqWVgIV4k="/> 

したがって、Webサイトを実行するとエラーがスローされます:

System.ArgumentException:Keyword not supported: 'eF8w9r2UJOsk0Ps3pxmV7/Fy/xPR2hN2S7BrC1iOYNnAUaI8AqkSm5bw7r+ta4sePWSV9t/3Spnpz6wsFpvMmcppNpqM5Zk7iiDqWVgIV4k='.
Line 46:   string[] roleNames;
Line 47:   roleNames = Roles.GetAllRoles();

誰かがそれを見つけるのを手伝ってくれますか、それとも何か提案がありますか?

4

3 に答える 3

0

これが、ロールメンバーシッププロバイダーを使用しているという事実と関係があるかどうかはわかりません。

ConnectionStringSettings値を復号化する前に、オブジェクトを要求しています。

ConfigurationManager.ConnectionStrings[ConnectionStringKey].ConnectionString

このコードは、暗号化されていない接続文字列で通常検出されるキーワードペアを自動的に解析しようとしています。暗号化されたバージョンにはキーワードのペアがないため、キーワードが認識されないというエラーがあります。

構成値を取得し、それを復号化してから、ConnectionStringSettingsそれが表すオブジェクトを作成する必要があります。ConnectionStringその後、そこからプロパティにアクセスできます。

復号化メソッドが必要な暗号化キーにアクセスできると仮定して、次のようなことを試してください。

  string ConnectionStringKey = "strConnectionString";
  string encryptedConnection = ConfigurationManager.ConnectionStrings[ConnectionStringKey].ToString();
  string unencryptedConnection = Security.DecryptString(encryptedConnection);

  ConnectionStringSettings connection = new ConnectionStringSettings("SQL", unencryptedConnection);
  string SQLConnectionString = connection.ConnectionString;

おそらくこれをいくつかの例外処理でラップする必要がありますが、アイデアが得られることを願っています。

于 2012-10-23T00:33:29.673 に答える
0

@SilverbackNet:はい、あなたが話しているのと同じように見えます.ライブラリには、EncryptメソッドとDecryptメソッドの両方を持つクラスセキュリティがあります。DBに接続するとき、SQLHelperを使用して構成値を取得し、復号化します。すべてのプロジェクトは問題なく動作します。しかし、Role と Membership を使用すると、System.Security 名前空間に ConnectionString Encrypted を読み取るメソッドが存在しないと言ったため、デフォルトの構成 RoleManager と Membership を使用できないことがわかりました。したがって、RoleProvider を再作成し、MembershipProvider がすべてのメソッドをオーバーライドする別の方法を作成する必要があります。では、次のWeb.configように変更されます。

namespace Library.Roles
{
  public class MyRoleProvider : RoleProvider
  {
     //code override all method in Roles
  }
}

namespace Library.Membership
{
  public class MyMembershipProvider : MembershipProvider
  {
     //code override all method in MembershipProvider
  }
}

web.config

 <roleManager enabled="true" defaultProvider="MyRoleProvider">
      <providers>
        <add connectionStringName="strConnectionString" name="MyRoleProvider" type="Library.Roles.MyRoleProvider" />
      </providers>
    </roleManager>   
    <membership defaultProvider="MyMembershipProvider">
      <providers>
        <add connectionStringName="strConnectionString" name="MyMembershipProvider" type="Library.Membership.MyMembershipProvider"/>
      </providers>
    </membership>
于 2012-10-23T06:42:55.573 に答える
0

Protected Configurationを使用しないのはなぜですか? それはあなたのために組み込まれています。

本当に独自のものを使用したい場合は、暗号化された文字列をどのように作成しましたか? このメソッドは System.Security 名前空間に存在しないため、このようなサードパーティ ライブラリを使用していると思います。私の推測では、キーを提供する方法で暗号化したのですが、復号化するときに同じキーを使用していないか、Decrypt メソッドが壊れているだけです。ライブラリについて詳しく知らないと、それを伝えるのは本当に難しいです。

于 2012-10-22T23:46:04.810 に答える