Как указано здесь, SecureString
не лучший способ использовать в этом сценарии.
Если бы у меня была необходимость поделиться учетными данными пользователей, я бы, вероятно, поделился именем пользователя и хешированным + соленым паролем , чтобы вы были в безопасности и используйте только представление пароля , но не его содержимое.
Простой способ сделать это, например, использовать BCryt Library (, где есть .NET-представление этого ) и просто разместить представление имени пользователя и пароля в таблице, готовой к быть поделены
Вот как вы бы это использовали:
StringBuilder sb = new StringBuilder();
// run ADO.NET / Entity Framework / etc and query your DB with something like:
"SELECT user_id, username, password FROM [TblUsers];"
// loop through the results
sb.AppendFormat(
"INSERT INTO [TblSharedUsers] SELECT '{0}','{1}','{2}'",
dr["id"], dr["username"],
BCrypt.HashPassword(dr["password"], BCrypt.GenerateSalt(12));
);
// then run sb.ToSTring() agains your db
на стороне клиента, вы можете создать новый AuthenticationProvider
(так что будет легко изменить, когда сеть будет недоступна, используя IoC и DI ), который читает из TblSharedUsers
и проверьте пароль пользователя как
string userPassword = Request["password"];
"SELECT id, password FROM [TblSharedUsers] WHERE username = @usr;"
if( BCrypt.CheckPassword(userPassword, dr["password"]) )
// User can log in
else
// Credentials are invalid
Надеюсь, это поможет кому-то с такой же проблемой.