Identity示例项目中的DataProtectionProvider

h b*_*bob 19 asp.net asp.net-mvc owin asp.net-identity

官方身份2示例项目的代码如下 UserManager.Create()

public static UserManager Create(IdentityFactoryOptions<UserManager> options, IOwinContext context) {

  //...etc...

  // --- what does this block do? ---
  var dataProtectionProvider = options.DataProtectionProvider;
  if (dataProtectionProvider != null) {
    manager.UserTokenProvider = new DataProtectorTokenProvider<User>(dataProtectionProvider.Create("ASP.NET Identity"));
  }
  // --------------------------------

  //...etc...

}
Run Code Online (Sandbox Code Playgroud)

alpha/beta/RTM Identity文档很糟糕或根本不存在.

这是做什么的?

Hor*_*Net 19

以下行中的保护提供程序用作令牌提供程序/生成器.

manager.UserTokenProvider = new DataProtectorTokenProvider<User>(dataProtectionProvider.Create("ASP.NET Identity"));
Run Code Online (Sandbox Code Playgroud)

它负责生成电子邮件确认令牌或密码重置令牌.如果您未设置此行,则无法使用此功能(将抛出相应的异常).这里可以找到一个例子.

其主要目的是提供IDataProtector接口的实现(通过Create方法),该接口加密和解密数据.框架中此接口的实现是DpapiDataProtectionProvider,当应用程序不由ASP.NET托管时,应该使用该实现.Web上还有其他几种实现(例如,出于安全目的使用机器密钥的实现).class有关DataProtectorTokenProvider的更多信息,请查看MSDN文档.

UPDATE

现在提供广泛的数据保护文档.

  • 我知道这回答了一段时间,但我想我还是试着问.默认情况下设置的值:"ASP.NET Identity",这有关系吗?换句话说,它必须是这个确切的值,或者这绝对是任何东西.我想要了解的是这个值是如何使用的?令牌是否具有此值,或者这是为了识别要使用的内部类别等等? (3认同)