I have a desktop WPF application which authenticates with Dynamics CRM 2011. I ask for the username and password of the user and use them to connect to Dynamics CRM 2011 using CrmConnection.parse("url={2};Username={1};Password{2}",CRMServerUrl, Username,Password)
. This class then connects to the CRM Server using the provided credentials (authenticated against Active Directory).
The conundrum I'm struggling with is that part of the design of the application is that authentication to CRM is only needed once. Any authentications past the first one should happen automatically using the credentials the user previously entered (And yes, the user can change these in the app if needed). This means I need to store passwords, but I cannot hash them.
Currently, I use the methods suggested by Jon Galloway in Encrypting Passwords in a .NET app.config File. A coworker recommended this. I read some other questions on this matter, but some of the concepts like derived keys, hardware encryption or sending a derived value are either total blind spots to me or are not possible within the design constraints.
What are my options?