dotnet / dotnet/aspnetcore

[API Proposal]: SignInManager.MakePasskeyCreationOptionsAsync and PasskeyHandler.MakeCreationOptionsAsync with TUser parameter

Open
#64,383 0 comments 0 reactions 0 assignees View on GitHub
api-suggestion area-identity
Dominant language
C#
Stars
38.4k
Forks
10.9k
Avg merge
2d 6h
Merged PRs (30d)
290

Description

## Background and Motivation

It is common to retrieve the user before calling `SignInManager.MakePasskeyCreationOptionsAsync`. Currently, this method does not provide a direct way to pass the already pre-fetched user instance as a parameter.

This means that `MakePasskeyCreationOptionsAsync` must retrieve the user again:

https://github.com/dotnet/aspnetcore/blob/9de03d56b6c24385d3ae1b99253982f4f3edbbb9/src/Identity/Core/src/PasskeyHandler.cs#L91

Introducing a new overload that accepts the user object could save a database round-trip when the user is already available before calling `MakePasskeyCreationOptionsAsync`.

## Proposed API

```diff
namespace Microsoft.AspNetCore.Identity;

public class SignInManager where TUser : class
{
public virtual async Task MakePasskeyCreationOptionsAsync(PasskeyUserEntity userEntity)
+ public virtual async Task MakePasskeyCreationOptionsAsync(TUser user);
}

public sealed class PasskeyHandler : IPasskeyHandler
where TUser : class
{
public async Task MakeCreationOptionsAsync(PasskeyUserEntity userEntity, HttpContext httpContext)
+ public async Task MakeCreationOptionsAsync(TUser user, HttpContext httpContext)
}
```

Maybe an additional argument for the display name is necessary as it exists today in PasskeyUserEntity?

https://github.com/dotnet/aspnetcore/blob/9de03d56b6c24385d3ae1b99253982f4f3edbbb9/src/Identity/Core/src/PasskeyUserEntity.cs#L21-L24

## Usage Examples

The proposed API can be used as follows:

```csharp
var user = await userManager.FindByIdAsync(userId);
var optionJson = await signInManager.MakePasskeyCreationOptionsAsync(user);
// Other operations using the user object
```

## Risks

Nothing I can see now.

cc @MackinnonBuck.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.