EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

密码的安全系统

本主题描述了内置的XAF工具,用于在使用AuthenticationStandard身份验证时生成和更改用户密码。

管理员生成的密码

管理员可以使用ResetPassword 操作为特定用户生成密码。如果用户类型实现了IAuthenticationStandardUser接口,并且应用了标准身份验证,则将激活此操作。

ResetPasswordController 视图控制器提供ResetPassword行动,这是为根视图中启用,并且都位于RecordEdit 行动容器。该操作将调用以下对话框:

Tutorial_SS_Lesson2_4

用户可以稍后更改生成的密码。

注意

执行ResetPassword Action后,您在详细信息视图中所做的更改将丢失。要在执行此操作时保存更改,请将SaveUserObjectOnPasswordChanging属性设置为true

首次登录后更改密码

实现IAuthenticationStandardUser接口的用户对象具有IAuthenticationStandardUser.ChangePasswordOnFirstLogon属性。如果您为特定用户将此属性设置为true,则在该用户登录后将显示以下对话框:

ChangePasswordOnFirstLogon

移动应用程序不支持此功能。

由于AuthenticationActiveDirectory身份验证类型不希望XAF应用程序密码更改,因此仅在使用标准身份验证时显示此窗口。

最终用户密码修改

使用标准身份验证类型时,有权访问“我的详细信息详细信息视图”的最终用户可以使用ChangeMyPassword操作更改其密码。此操作位于“编辑操作”容器中,并且已为“我的详细信息详细信息视图”激活。它调用以下对话框:

Tutorial_SS_Lesson2_5

注意
  • 您可以使用“非持久对象验证”主题中描述的方法,强制用户使用复杂的密码。
  • 执行ChangeMyPassword Action后,您在详细信息视图中所做的更改将丢失。要在执行此操作时保存更改,请将SaveUserObjectOnPasswordChanging属性设置为true

使用代码访问密码

内置的用户类(即DevExpress.Persistent.BaseImpl.EFPermissionPolicyUserDevExpress.Persistent.BaseImplPermissionPolicyUser)不存储密码为纯文本。而是使用Rfc2898DeriveBytesSHA512类从密码创建派生的哈希。使用DevExpress.Persistent.Base.PasswordCryptographer类的静态EnableRfc2898SupportLegacySha512属性指定行为。

EnableRfc2898 = true

EnableRfc2898 =否

SupportLegacySha512 = true

支持数据库中存在的SHA512加密密码。使用RFC 2898算法对新创建的密码进行加密和验证。

所有密码均使用SHA512进行加密和验证。

SupportLegacySha512 =否

默认模式。不支持SHA512加密的密码。所有密码均使用RFC 2898算法加密和验证。此模式符合FIPS

您可以在以下位置之一中指定这些静态属性值:

  • Module.csModule.vb)文件中的平台无关模块的构造函数中;
  • 在位于WinApplication.Start调用之前位于Program.cs(Program.vb)文件中的WinForms应用程序的Main方法中;
  • 在WebApplication.Start调用之前,请位于Global.asax.cs(Global.asax.vb)文件中的ASP.NET应用程序的Application_Start方法中。
注意

如果使用中间层安全性(WCF Service),则还需要在位于Program.cs(Program.vb)文件中的服务器应用程序的Main方法中指定这些静态属性。

RFC 2898是首选算法,因为它更现代,更安全。在使用解决方案向导版本17.1或更高版本创建的XAF应用程序中,默认情况下启用该功能。建议在现有应用程序中手动启用它。

无法解密存储的值以获得原始密码。要验证或加密密码,请使用以下方法之一:

  • 静态的PasswordCryptographer.VerifyHashedPasswordDelegatePasswordCryptographer.HashPasswordDelegate方法。

    若要自定义这些方法的行为,请使用以下方法:

    using DevExpress.Persistent.Base;
    // ...
    PasswordCryptographer.VerifyHashedPasswordDelegate = VerifyHashedPassword;
    PasswordCryptographer.HashPasswordDelegate = HashPassword;
    // ...
    static bool VerifyHashedPassword(string saltedPassword, string password) {
        bool result;
        // validate password here.
        return result;
    }
    static string HashPassword(string password) {
        string hash;
        // create hash here.
        return hash;
    }
    
  • IAuthenticationStandardUser.ComparePasswordIAuthenticationStandardUser.SetPassword方法。若要使用这些方法,请获取实现IAuthenticationStandardUser接口的目标用户类的实例。如何:基于现有业务类实现自定义安全系统用户主题中提供了一个示例。

转载保留此链接,注明出处