我需要在 ASP.NET 身份2中自定义GenerateChangePhoneNumberToken()和GenerateEmailConfirmationToken()。如何实施?我需要生成我的自定义令牌。我能做到吗?
不,您只能自己替换完整的 ASP.NET 身份代码。令牌是根据 RFC 6238 生成和验证的,使用 6 位数字。您可以在此处参考源代码
是的,您可以重新实现 GenerateChangePhoneNumberToken,因为它在 Usermanager 类中定义为虚拟方法。顺便说一下,您必须更改类 Rfc6238Authentication 中的代码以自定义已编码的主要函数,但不能更改生成的代码。要实现这一点,您应该将此类和(我的意思是复制/粘贴)带到您的项目中并根据需要对其进行修改。我想您可能需要更改 otp 生命周期。我做到了。
作为线索:rfc6238 中的实现有一个名为 _timeStep 的私有静态字段,默认值为 3 分钟:
private static readonly TimeSpan _timestep = TimeSpan.FromMinutes(3);
您可以将其行为更改为属性(删除只读):
private static TimeSpan _timestep = TimeSpan.FromMinutes(3);
并使生成代码方法更加动态:
public static int GenerateCode(SecurityToken securityToken, TimeSpan timeStep ,string modifier = null)
{
if (securityToken == null)
{
throw new ArgumentNullException("securityToken");
}
_timestep = timeStep;
// Allow a variance of no greater than 90 seconds in either direction
var currentTimeStep = GetCurrentTimeStepNumber();
using (var hashAlgorithm = new HMACSHA1(securityToken.GetDataNoClone()))
{
return ComputeTotp(hashAlgorithm, currentTimeStep, modifier);
}
}
请记住,您必须传递时间步骤来验证代码方法,以确保验证正常工作