Two factor auth recovery code implementation.

This commit is contained in:
JudahGabriel
2018-02-23 18:06:08 -06:00
parent c442be17b2
commit 461a58f4d3
4 changed files with 28 additions and 3 deletions
+5
View File
@@ -92,6 +92,11 @@ namespace Raven.Identity
/// </summary>
public virtual List<UserLoginInfo> Logins { get; private set; }
/// <summary>
/// The list of two factor authentication recovery codes.
/// </summary>
public virtual List<string> TwoFactorRecoveryCodes { get; set; }
/// <summary>
/// Creates a new IdentityUser.
/// </summary>
+1 -1
View File
@@ -7,7 +7,7 @@ using System.Text;
namespace Raven.Identity
{
/// <summary>
/// A two-factor authentication authorization token.
/// A authorization token created by a login provider.
/// </summary>
public class IdentityUserAuthToken
{
+1 -1
View File
@@ -19,7 +19,7 @@
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<Version>4.2.0</Version>
<Version>4.3.0</Version>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild>
<RootNamespace>Raven.Identity</RootNamespace>
</PropertyGroup>
+21 -1
View File
@@ -26,7 +26,8 @@ namespace Raven.Identity
IUserTwoFactorStore<TUser>,
IUserPhoneNumberStore<TUser>,
IUserAuthenticatorKeyStore<TUser>,
IUserAuthenticationTokenStore<TUser>
IUserAuthenticationTokenStore<TUser>,
IUserTwoFactorRecoveryCodeStore<TUser>
where TUser : IdentityUser
{
private bool _disposed;
@@ -699,6 +700,25 @@ namespace Raven.Identity
return tokenOrNull.Value;
}
/// <inheritdoc />
public Task ReplaceCodesAsync(TUser user, IEnumerable<string> recoveryCodes, CancellationToken cancellationToken)
{
user.TwoFactorRecoveryCodes = new List<string>(recoveryCodes);
return Task.CompletedTask;
}
/// <inheritdoc />
public Task<bool> RedeemCodeAsync(TUser user, string code, CancellationToken cancellationToken)
{
return Task.FromResult(user.TwoFactorRecoveryCodes.Remove(code));
}
/// <inheritdoc />
public Task<int> CountCodesAsync(TUser user, CancellationToken cancellationToken)
{
return Task.FromResult(user.TwoFactorRecoveryCodes.Count);
}
#endregion