Q:

How do I keep from duplicating data that may change in a .NET configuration file? 

I have a username and password key within my web.config file.  I need to access those keys within the web.config in a provider.  Is this possible if so what is the best way to accomplish this? 
This is an example of how I want it to work:
<add key="ActiveDirectoryUser" value="user"/>
<add key="ActiveDirectoryPass" value="pass"/>

 <membership defaultProvider="ADMembershipProvider">
    <providers>
      <clear />
      <add name="ADMembershipProvider"
           type="System. Web. Security. ActiveDirectoryMembershipProvider" 
           connectionStringName="ADConnectionString"
           connectionUsername="userfromabove"
           connectionPassword="passfromabove"
           attributeMapUsername="sAMAccountName" />
    </providers>
  </membership>

Access from within the web.config not in code. 

A:

The code consuming the configuration file needs to be set up ahead of time in order to be able to accomplish what you are seeking.  And that particular code hasn't, so it will not work exactly that way you want it to. 
Note that in more mature systems, the way around this is to have some other system handle inserting configuration data that may change or is sensitive.  For example, we use Team Foundation Server.  During a build we apply config transformations to create a tokenized web.config that looks like the following:
<add key="ActiveDirectoryUser" value="__ActiveDirectoryUser__"/>
<add key="ActiveDirectoryPass" value="__ActiveDirectoryPass__"/>

 <membership defaultProvider="ADMembershipProvider">
    <providers>
      <clear />
      <add name="ADMembershipProvider"
           type="System. Web. Security. ActiveDirectoryMembershipProvider" 
           connectionStringName="ADConnectionString"
           connectionUsername="__ActiveDirectoryUser__"
           connectionPassword="__ActiveDirectoryPassword__"
           attributeMapUsername="sAMAccountName" />
    </providers>
  </membership>

Then later in our Release process, an automated task will replace each __Variable__ with a corresponding value defined in our release management system.