У меня есть usercontrol, который отвечает за представление создания и смены пользователей. UserControl привязан к лицу, сделанной в РИА службой:Лучший подход: диалог установки/изменения пароля
[MetadataType(typeof(User.UserMetadata))]
public partial class User
{
internal class UserMetadata
{
protected UserMetadata() {}
[Required]
public string Name { get; set; }
[Exclude]
public string PasswordHash { get; set; }
[Exclude]
public int PasswordSalt { get; set; }
[Required]
public string ShortName { get; set; }
[Include]
public IEnumerable<UserRole> UserRoles { get; set; }
}
[DataMember]
[RegularExpression("^.*[^a-zA-Z0-9].*$", ErrorMessageResourceName = "BadPasswordStrength", ErrorMessageResourceType = typeof(ErrorResources))]
[StringLength(25, MinimumLength = 6)]
public string NewPassword { get; set; }
}
При создании нового пользователя, в поле «NewPassword» требуется - но при изменении свойств существующего пользователя, он не является (оно используется для изменения пароля).
Каков наилучший подход для решения этой проблемы? У меня есть несколько идей, но все они чувствуют себя немного дерьмовый :-)
Благодарности
Я запомню это. Вы никогда не должны включать пароли в свои сущности. Вместо этого сделайте их параметры метода и убедитесь, что они не включены в uri (используйте POST). Кроме того, переключитесь на использование https на основании. Я опубликовал некоторые рекомендации о том, как это сделать с членством в ASP.NET и как использовать https в моем блоге. http://blogs.msdn.com/b/kylemc/archive/2010/05/10/using-asp-net-membership-in-silverlight.aspx http://blogs.msdn.com/b /kylemc/archive/2010/05/26/ria-services-using-https.aspx –
Нет. Я никогда не выталкиваю пароль в графический интерфейс, свойство NewPassword «вычисляется» и не сопоставляется с атрибутом table. Это просто, чтобы сменить пароль и начальные пароли от пользователя. Просто, чтобы убедиться. Ваше предложение состоит в том, чтобы удалить это свойство и ввести услугу, которая несет ответственность только за установку/сброс пароля? Звучит нормально - даже я не понимаю разницы. – Daniel
@ Даниэль: Если вы только отправляете пароль уже зашифрованным, ваша идея также работает. Вы действительно шифруете свой пароль на клиенте? Это была моя главная проблема. –