Skip to content

Commit c21e32e

Browse files
committed
Cleanups
1 parent f5ee6b5 commit c21e32e

File tree

16 files changed

+33
-31
lines changed

16 files changed

+33
-31
lines changed

src/Identity/Core/src/PasskeyOptions.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,17 @@ public class PasskeyOptions
4343
/// <remarks>
4444
/// See <see href="https://www.w3.org/TR/webauthn-3/#enumdef-userverificationrequirement"/>.
4545
/// Possible values are "required", "preferred", and "discouraged".
46-
/// The default value is "preferred".
46+
/// If left <see langword="null"/>, the browser defaults to "preferred".
4747
/// </remarks>
4848
public string? UserVerificationRequirement { get; set; }
4949

5050
/// <summary>
5151
/// Gets or sets the extent to which the server desires to create a client-side discoverable credential.
52-
/// Supported values are "discouraged", "preferred", or "required".
5352
/// </summary>
5453
/// <remarks>
5554
/// See <see href="https://www.w3.org/TR/webauthn-3/#enumdef-residentkeyrequirement"/>.
55+
/// Possible values are "discouraged", "preferred", or "required".
56+
/// If left <see langword="null"/>, the browser defaults to "preferred".
5657
/// </remarks>
5758
public string? ResidentKeyRequirement { get; set; }
5859

@@ -61,7 +62,7 @@ public class PasskeyOptions
6162
/// </summary>
6263
/// <remarks>
6364
/// See <see href="https://www.w3.org/TR/webauthn-3/#enumdef-attestationconveyancepreference"/>.
64-
/// The default value is "none".
65+
/// If left <see langword="null"/>, the browser defaults to "none".
6566
/// </remarks>
6667
public string? AttestationConveyancePreference { get; set; }
6768

@@ -70,6 +71,7 @@ public class PasskeyOptions
7071
/// </summary>
7172
/// <remarks>
7273
/// See <see href="https://www.w3.org/TR/webauthn-3/#enumdef-authenticatorattachment"/>.
74+
/// If left <see langword="null"/>, any authenticator attachment modality is allowed.
7375
/// </remarks>
7476
public string? AuthenticatorAttachment { get; set; }
7577

src/Identity/Core/src/SignInManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ public virtual async Task<PasskeyAttestationResult> PerformPasskeyAttestationAsy
516516
/// <c>navigator.credentials.get()</c> JavaScript API. The argument to <c>navigator.credentials.get()</c>
517517
/// should be obtained by calling <see cref="MakePasskeyRequestOptionsAsync(TUser)"/>.
518518
/// Upon success, the <see cref="PasskeyAssertionResult{TUser}.Passkey"/> should be stored on the
519-
/// <see cref="PasskeyAssertionResult{TUser}.User"/> using <see cref="UserManager{TUser}.SetPasskeyAsync(TUser, UserPasskeyInfo)"/>.
519+
/// <see cref="PasskeyAssertionResult{TUser}.User"/> using <see cref="UserManager{TUser}.AddOrUpdatePasskeyAsync(TUser, UserPasskeyInfo)"/>.
520520
/// </remarks>
521521
/// <param name="credentialJson">The credentials obtained by JSON-serializing the result of the <c>navigator.credentials.get()</c> JavaScript function.</param>
522522
/// <returns>
@@ -577,7 +577,7 @@ public virtual async Task<SignInResult> PasskeySignInAsync(string credentialJson
577577

578578
// After a successful assertion, we need to update the passkey so that it has the latest
579579
// sign count and authenticator data.
580-
var setPasskeyResult = await UserManager.SetPasskeyAsync(assertionResult.User, assertionResult.Passkey);
580+
var setPasskeyResult = await UserManager.AddOrUpdatePasskeyAsync(assertionResult.User, assertionResult.Passkey);
581581
if (!setPasskeyResult.Succeeded)
582582
{
583583
return SignInResult.Failed;

src/Identity/EntityFrameworkCore/src/PublicAPI.Unshipped.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserContext<TU
9090
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserContext<TUser, TKey, TUserClaim, TUserLogin, TUserToken, TUserPasskey>.Users.set -> void
9191
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserContext<TUser, TKey, TUserClaim, TUserLogin, TUserToken, TUserPasskey>.UserTokens.get -> Microsoft.EntityFrameworkCore.DbSet<TUserToken!>!
9292
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserContext<TUser, TKey, TUserClaim, TUserLogin, TUserToken, TUserPasskey>.UserTokens.set -> void
93+
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore<TUser, TContext, TKey, TUserClaim, TUserLogin, TUserToken, TUserPasskey>.AddOrUpdatePasskeyAsync(TUser! user, Microsoft.AspNetCore.Identity.UserPasskeyInfo! passkey, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task!
9394
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore<TUser, TContext, TKey, TUserClaim, TUserLogin, TUserToken, TUserPasskey>.Context.get -> TContext!
9495
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore<TUser, TContext, TKey, TUserClaim, TUserLogin, TUserToken, TUserPasskey>.CreateUserPasskey(TUser! user, Microsoft.AspNetCore.Identity.UserPasskeyInfo! passkey) -> TUserPasskey!
9596
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore<TUser, TContext, TKey, TUserClaim, TUserLogin, TUserToken, TUserPasskey>.FindByPasskeyIdAsync(byte[]! credentialId, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<TUser?>!
@@ -98,7 +99,7 @@ virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore<TUser, T
9899
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore<TUser, TContext, TKey, TUserClaim, TUserLogin, TUserToken, TUserPasskey>.FindUserPasskeyByIdAsync(byte[]! credentialId, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<TUserPasskey?>!
99100
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore<TUser, TContext, TKey, TUserClaim, TUserLogin, TUserToken, TUserPasskey>.GetPasskeysAsync(TUser! user, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<System.Collections.Generic.IList<Microsoft.AspNetCore.Identity.UserPasskeyInfo!>!>!
100101
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore<TUser, TContext, TKey, TUserClaim, TUserLogin, TUserToken, TUserPasskey>.RemovePasskeyAsync(TUser! user, byte[]! credentialId, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task!
101-
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore<TUser, TContext, TKey, TUserClaim, TUserLogin, TUserToken, TUserPasskey>.SetPasskeyAsync(TUser! user, Microsoft.AspNetCore.Identity.UserPasskeyInfo! passkey, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task!
102+
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore<TUser, TRole, TContext, TKey, TUserClaim, TUserRole, TUserLogin, TUserToken, TRoleClaim, TUserPasskey>.AddOrUpdatePasskeyAsync(TUser! user, Microsoft.AspNetCore.Identity.UserPasskeyInfo! passkey, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task!
102103
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore<TUser, TRole, TContext, TKey, TUserClaim, TUserRole, TUserLogin, TUserToken, TRoleClaim, TUserPasskey>.Context.get -> TContext!
103104
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore<TUser, TRole, TContext, TKey, TUserClaim, TUserRole, TUserLogin, TUserToken, TRoleClaim, TUserPasskey>.CreateUserPasskey(TUser! user, Microsoft.AspNetCore.Identity.UserPasskeyInfo! passkey) -> TUserPasskey!
104105
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore<TUser, TRole, TContext, TKey, TUserClaim, TUserRole, TUserLogin, TUserToken, TRoleClaim, TUserPasskey>.FindByPasskeyIdAsync(byte[]! credentialId, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<TUser?>!
@@ -107,7 +108,6 @@ virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore<TUser, TRole
107108
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore<TUser, TRole, TContext, TKey, TUserClaim, TUserRole, TUserLogin, TUserToken, TRoleClaim, TUserPasskey>.FindUserPasskeyByIdAsync(byte[]! credentialId, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<TUserPasskey?>!
108109
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore<TUser, TRole, TContext, TKey, TUserClaim, TUserRole, TUserLogin, TUserToken, TRoleClaim, TUserPasskey>.GetPasskeysAsync(TUser! user, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<System.Collections.Generic.IList<Microsoft.AspNetCore.Identity.UserPasskeyInfo!>!>!
109110
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore<TUser, TRole, TContext, TKey, TUserClaim, TUserRole, TUserLogin, TUserToken, TRoleClaim, TUserPasskey>.RemovePasskeyAsync(TUser! user, byte[]! credentialId, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task!
110-
virtual Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserStore<TUser, TRole, TContext, TKey, TUserClaim, TUserRole, TUserLogin, TUserToken, TRoleClaim, TUserPasskey>.SetPasskeyAsync(TUser! user, Microsoft.AspNetCore.Identity.UserPasskeyInfo! passkey, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task!
111111
*REMOVED*Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore<TUser, TContext, TKey, TUserClaim, TUserLogin, TUserToken>.AutoSaveChanges.get -> bool
112112
*REMOVED*Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore<TUser, TContext, TKey, TUserClaim, TUserLogin, TUserToken>.AutoSaveChanges.set -> void
113113
*REMOVED*Microsoft.AspNetCore.Identity.EntityFrameworkCore.UserOnlyStore<TUser, TContext, TKey, TUserClaim, TUserLogin, TUserToken>.SaveChanges(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task!

src/Identity/EntityFrameworkCore/src/UserOnlyStore.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,7 @@ protected virtual TUserPasskey CreateUserPasskey(TUser user, UserPasskeyInfo pas
612612
/// <param name="passkey"></param>
613613
/// <param name="cancellationToken">The <see cref="CancellationToken"/> used to propagate notifications that the operation should be canceled.</param>
614614
/// <returns>The <see cref="Task"/> that represents the asynchronous operation.</returns>
615-
public virtual async Task SetPasskeyAsync(TUser user, UserPasskeyInfo passkey, CancellationToken cancellationToken)
615+
public virtual async Task AddOrUpdatePasskeyAsync(TUser user, UserPasskeyInfo passkey, CancellationToken cancellationToken)
616616
{
617617
cancellationToken.ThrowIfCancellationRequested();
618618
ThrowIfDisposed();

src/Identity/EntityFrameworkCore/src/UserStore.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,7 @@ protected virtual TUserPasskey CreateUserPasskey(TUser user, UserPasskeyInfo pas
757757
/// <param name="passkey"></param>
758758
/// <param name="cancellationToken">The <see cref="CancellationToken"/> used to propagate notifications that the operation should be canceled.</param>
759759
/// <returns>The <see cref="Task"/> that represents the asynchronous operation.</returns>
760-
public virtual async Task SetPasskeyAsync(TUser user, UserPasskeyInfo passkey, CancellationToken cancellationToken)
760+
public virtual async Task AddOrUpdatePasskeyAsync(TUser user, UserPasskeyInfo passkey, CancellationToken cancellationToken)
761761
{
762762
cancellationToken.ThrowIfCancellationRequested();
763763
ThrowIfDisposed();

src/Identity/Extensions.Core/src/IUserPasskeyStore.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public interface IUserPasskeyStore<TUser> : IUserStore<TUser> where TUser : clas
2222
/// <param name="passkey">The passkey to add.</param>
2323
/// <param name="cancellationToken">The <see cref="CancellationToken"/> used to propagate notifications that the operation should be canceled.</param>
2424
/// <returns>The <see cref="Task"/> that represents the asynchronous operation.</returns>
25-
Task SetPasskeyAsync(TUser user, UserPasskeyInfo passkey, CancellationToken cancellationToken);
25+
Task AddOrUpdatePasskeyAsync(TUser user, UserPasskeyInfo passkey, CancellationToken cancellationToken);
2626

2727
/// <summary>
2828
/// Gets the passkey credentials for the specified <paramref name="user"/>.

src/Identity/Extensions.Core/src/PublicAPI.Unshipped.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
#nullable enable
22
*REMOVED*Microsoft.AspNetCore.Identity.UserLoginInfo.UserLoginInfo(string! loginProvider, string! providerKey, string? displayName) -> void
33
Microsoft.AspNetCore.Identity.IUserPasskeyStore<TUser>
4+
Microsoft.AspNetCore.Identity.IUserPasskeyStore<TUser>.AddOrUpdatePasskeyAsync(TUser! user, Microsoft.AspNetCore.Identity.UserPasskeyInfo! passkey, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task!
45
Microsoft.AspNetCore.Identity.IUserPasskeyStore<TUser>.FindByPasskeyIdAsync(byte[]! credentialId, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<TUser?>!
56
Microsoft.AspNetCore.Identity.IUserPasskeyStore<TUser>.FindPasskeyAsync(TUser! user, byte[]! credentialId, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<Microsoft.AspNetCore.Identity.UserPasskeyInfo?>!
67
Microsoft.AspNetCore.Identity.IUserPasskeyStore<TUser>.GetPasskeysAsync(TUser! user, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<System.Collections.Generic.IList<Microsoft.AspNetCore.Identity.UserPasskeyInfo!>!>!
78
Microsoft.AspNetCore.Identity.IUserPasskeyStore<TUser>.RemovePasskeyAsync(TUser! user, byte[]! credentialId, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task!
8-
Microsoft.AspNetCore.Identity.IUserPasskeyStore<TUser>.SetPasskeyAsync(TUser! user, Microsoft.AspNetCore.Identity.UserPasskeyInfo! passkey, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task!
99
Microsoft.AspNetCore.Identity.UserLoginInfo.UserLoginInfo(string! loginProvider, string! providerKey, string? providerDisplayName) -> void
1010
Microsoft.AspNetCore.Identity.UserManager<TUser>.ServiceProvider.get -> System.IServiceProvider!
1111
Microsoft.AspNetCore.Identity.UserPasskeyInfo
@@ -26,9 +26,9 @@ Microsoft.AspNetCore.Identity.UserPasskeyInfo.SignCount.set -> void
2626
Microsoft.AspNetCore.Identity.UserPasskeyInfo.Transports.get -> string![]?
2727
Microsoft.AspNetCore.Identity.UserPasskeyInfo.UserPasskeyInfo(byte[]! credentialId, byte[]! publicKey, string? name, System.DateTimeOffset createdAt, uint signCount, string![]? transports, bool isUserVerified, bool isBackupEligible, bool isBackedUp, byte[]! attestationObject, byte[]! clientDataJson) -> void
2828
static readonly Microsoft.AspNetCore.Identity.IdentitySchemaVersions.Version3 -> System.Version!
29+
virtual Microsoft.AspNetCore.Identity.UserManager<TUser>.AddOrUpdatePasskeyAsync(TUser! user, Microsoft.AspNetCore.Identity.UserPasskeyInfo! passkey) -> System.Threading.Tasks.Task<Microsoft.AspNetCore.Identity.IdentityResult!>!
2930
virtual Microsoft.AspNetCore.Identity.UserManager<TUser>.FindByPasskeyIdAsync(byte[]! credentialId) -> System.Threading.Tasks.Task<TUser?>!
3031
virtual Microsoft.AspNetCore.Identity.UserManager<TUser>.GetPasskeyAsync(TUser! user, byte[]! credentialId) -> System.Threading.Tasks.Task<Microsoft.AspNetCore.Identity.UserPasskeyInfo?>!
3132
virtual Microsoft.AspNetCore.Identity.UserManager<TUser>.GetPasskeysAsync(TUser! user) -> System.Threading.Tasks.Task<System.Collections.Generic.IList<Microsoft.AspNetCore.Identity.UserPasskeyInfo!>!>!
3233
virtual Microsoft.AspNetCore.Identity.UserManager<TUser>.RemovePasskeyAsync(TUser! user, byte[]! credentialId) -> System.Threading.Tasks.Task<Microsoft.AspNetCore.Identity.IdentityResult!>!
33-
virtual Microsoft.AspNetCore.Identity.UserManager<TUser>.SetPasskeyAsync(TUser! user, Microsoft.AspNetCore.Identity.UserPasskeyInfo! passkey) -> System.Threading.Tasks.Task<Microsoft.AspNetCore.Identity.IdentityResult!>!
3434
virtual Microsoft.AspNetCore.Identity.UserManager<TUser>.SupportsUserPasskey.get -> bool

src/Identity/Extensions.Core/src/UserManager.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2153,14 +2153,14 @@ public virtual Task<int> CountRecoveryCodesAsync(TUser user)
21532153
/// <param name="user">The user for whom the passkey should be added or updated.</param>
21542154
/// <param name="passkey">The passkey to add or update.</param>
21552155
/// <returns>Whether the passkey was successfully set.</returns>
2156-
public virtual async Task<IdentityResult> SetPasskeyAsync(TUser user, UserPasskeyInfo passkey)
2156+
public virtual async Task<IdentityResult> AddOrUpdatePasskeyAsync(TUser user, UserPasskeyInfo passkey)
21572157
{
21582158
ThrowIfDisposed();
21592159
var passkeyStore = GetUserPasskeyStore();
21602160
ArgumentNullThrowHelper.ThrowIfNull(user);
21612161
ArgumentNullThrowHelper.ThrowIfNull(passkey);
21622162

2163-
await passkeyStore.SetPasskeyAsync(user, passkey, CancellationToken).ConfigureAwait(false);
2163+
await passkeyStore.AddOrUpdatePasskeyAsync(user, passkey, CancellationToken).ConfigureAwait(false);
21642164
return await UpdateUserAsync(user).ConfigureAwait(false);
21652165
}
21662166

src/Identity/samples/IdentitySample.PasskeyConformance/InMemoryUserStore.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public Task<IdentityResult> UpdateAsync(TUser user, CancellationToken cancellati
7070
return Task.FromResult(IdentityResult.Success);
7171
}
7272

73-
public Task SetPasskeyAsync(TUser user, UserPasskeyInfo passkey, CancellationToken cancellationToken)
73+
public Task AddOrUpdatePasskeyAsync(TUser user, UserPasskeyInfo passkey, CancellationToken cancellationToken)
7474
{
7575
var passkeyEntity = user.Passkeys.FirstOrDefault(p => p.CredentialId.SequenceEqual(passkey.CredentialId));
7676
if (passkeyEntity is null)

src/Identity/samples/IdentitySample.PasskeyConformance/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@
124124
}
125125
}
126126

127-
await passkeyStore.SetPasskeyAsync(user, attestationResult.Passkey, cancellationToken).ConfigureAwait(false);
127+
await passkeyStore.AddOrUpdatePasskeyAsync(user, attestationResult.Passkey, cancellationToken).ConfigureAwait(false);
128128
var updateResult = await userManager.UpdateAsync(user).ConfigureAwait(false);
129129
if (!updateResult.Succeeded)
130130
{
@@ -194,7 +194,7 @@
194194
return Results.BadRequest(new FailedResponse($"Assertion failed: {assertionResult.Failure.Message}"));
195195
}
196196

197-
await userManager.SetPasskeyAsync(assertionResult.User, assertionResult.Passkey);
197+
await userManager.AddOrUpdatePasskeyAsync(assertionResult.User, assertionResult.Passkey);
198198

199199
return Results.Ok(new OkResponse());
200200
});

0 commit comments

Comments
 (0)