diff --git a/src/AdminConsole/AdminConsole.csproj b/src/AdminConsole/AdminConsole.csproj index d388c00d1..147901d31 100644 --- a/src/AdminConsole/AdminConsole.csproj +++ b/src/AdminConsole/AdminConsole.csproj @@ -5,24 +5,24 @@ - - + + - + - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - - - + + + + + + diff --git a/src/Api/Api.csproj b/src/Api/Api.csproj index b819e1b50..45cc3a751 100644 --- a/src/Api/Api.csproj +++ b/src/Api/Api.csproj @@ -13,12 +13,12 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/Common/Common.csproj b/src/Common/Common.csproj index 529405bbd..c05243776 100644 --- a/src/Common/Common.csproj +++ b/src/Common/Common.csproj @@ -5,19 +5,19 @@ - - + + - - - + + + - + - + diff --git a/src/Service/Fido2Service.cs b/src/Service/Fido2Service.cs index b2b57841c..bd9710ad7 100644 --- a/src/Service/Fido2Service.cs +++ b/src/Service/Fido2Service.cs @@ -1,5 +1,4 @@ -using System.Buffers.Text; -using System.Collections.Immutable; +using System.Collections.Immutable; using System.Diagnostics; using System.Security.Cryptography; using System.Text; @@ -146,9 +145,9 @@ public async Task> RegisterBeginAsync(F var requestNewCredentialParameters = new RequestNewCredentialParams { User = user, + ExcludeCredentials = keyIds, AttestationPreference = attestation, AuthenticatorSelection = authenticatorSelection, - ExcludeCredentials = keyIds, Extensions = new AuthenticationExtensionsClientInputs { CredProps = true @@ -383,10 +382,10 @@ public async Task SignInCompleteAsync(SignInCompleteDTO request, var authenticationSessionConfiguration = await _tokenService.DecodeTokenAsync(request.Session, "session_", true); // Get registered credential from database - var credential = await _storage.GetCredential(request.Response.Id); + var credential = await _storage.GetCredential(request.Response.RawId); if (credential == null) { - throw new UnknownCredentialException(Base64Url.EncodeToString(request.Response.Id)); + throw new UnknownCredentialException(request.Response.Id); } // Create callback to check if userhandle owns the credentialId diff --git a/src/Service/Service.csproj b/src/Service/Service.csproj index b904d685e..671a22926 100644 --- a/src/Service/Service.csproj +++ b/src/Service/Service.csproj @@ -1,27 +1,27 @@  - - - + + + - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - - + + + + + diff --git a/tests/AdminConsole.Tests/AdminConsole.Tests.csproj b/tests/AdminConsole.Tests/AdminConsole.Tests.csproj index a30806275..732aff905 100644 --- a/tests/AdminConsole.Tests/AdminConsole.Tests.csproj +++ b/tests/AdminConsole.Tests/AdminConsole.Tests.csproj @@ -2,12 +2,12 @@ - - - + + + - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/Api.IntegrationTests/Api.IntegrationTests.csproj b/tests/Api.IntegrationTests/Api.IntegrationTests.csproj index 1b2ef10ff..b40d22463 100644 --- a/tests/Api.IntegrationTests/Api.IntegrationTests.csproj +++ b/tests/Api.IntegrationTests/Api.IntegrationTests.csproj @@ -1,16 +1,16 @@ - + - - - - - - + + + + + + - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/Api.IntegrationTests/Helpers/BrowserCredentialsHelper.cs b/tests/Api.IntegrationTests/Helpers/BrowserCredentialsHelper.cs index 7c5e12cd0..b76ce632a 100644 --- a/tests/Api.IntegrationTests/Helpers/BrowserCredentialsHelper.cs +++ b/tests/Api.IntegrationTests/Helpers/BrowserCredentialsHelper.cs @@ -14,7 +14,7 @@ public static class BrowserCredentialsHelper private static Task ReadCreateCredentialFileAsync() => File.ReadAllTextAsync(CreateCredentialsFile); private static Task ReadGetCredentialFileAsync() => File.ReadAllTextAsync(GetCredentialFile); - private async static Task GetCreateCredentialFunctions() + private static async Task GetCreateCredentialFunctions() { var tasks = new[] { ReadConvertersFileAsync(), ReadCreateCredentialFileAsync() }; await Task.WhenAll(tasks); @@ -23,19 +23,19 @@ private async static Task GetCreateCredentialFunctions() return result; } - public async static Task CreateCredentialsAsync(CredentialCreateOptions options, string originUrl) + public static async Task CreateCredentialsAsync(CredentialCreateOptions options, string originUrl) { using var driver = WebDriverFactory.GetDriver(originUrl); return await driver.CreateCredentialsAsync(options); } - public async static Task CreateCredentialsAsync(this IJavaScriptExecutor webDriver, CredentialCreateOptions options) => + public static async Task CreateCredentialsAsync(this IJavaScriptExecutor webDriver, CredentialCreateOptions options) => JsonSerializer.Deserialize( - (webDriver.ExecuteScript($"{await GetCreateCredentialFunctions()} return await createCredential({options.ToJson()});").ToString() - ?? string.Empty))!; + webDriver.ExecuteScript($"{await GetCreateCredentialFunctions()} return await createCredential({options.ToJson()});").ToString() + ?? string.Empty)!; - private async static Task GetGetCredentialFunctions() + private static async Task GetGetCredentialFunctions() { var tasks = new[] { ReadConvertersFileAsync(), ReadGetCredentialFileAsync() }; await Task.WhenAll(tasks); @@ -43,8 +43,8 @@ private async static Task GetGetCredentialFunctions() return tasks.Aggregate(string.Empty, (functions, task) => string.Concat(functions, task.Result)); } - public async static Task GetCredentialsAsync(this IJavaScriptExecutor webDriver, AssertionOptions options) => + public static async Task GetCredentialsAsync(this IJavaScriptExecutor webDriver, AssertionOptions options) => JsonSerializer.Deserialize( - (webDriver.ExecuteScript($"{await GetGetCredentialFunctions()} return await getCredential({options.ToJson()});").ToString() - ?? string.Empty))!; + webDriver.ExecuteScript($"{await GetGetCredentialFunctions()} return await getCredential({options.ToJson()});")?.ToString() + ?? string.Empty)!; } \ No newline at end of file diff --git a/tests/Api.IntegrationTests/Helpers/Js/createCredential.js b/tests/Api.IntegrationTests/Helpers/Js/createCredential.js index 7bc33d087..ef202cb2d 100644 --- a/tests/Api.IntegrationTests/Helpers/Js/createCredential.js +++ b/tests/Api.IntegrationTests/Helpers/Js/createCredential.js @@ -1,24 +1,25 @@ -async function createCredential(credentialCreateOptions) { - credentialCreateOptions.challenge = base64UrlToArrayBuffer(credentialCreateOptions.challenge); - credentialCreateOptions.user.id = base64UrlToArrayBuffer(credentialCreateOptions.user.id); - credentialCreateOptions.excludeCredentials?.forEach((cred) => { - cred.id = base64UrlToArrayBuffer(cred.id); - }); - - const credential = await navigator.credentials.create({ - publicKey: credentialCreateOptions, - }); - - const attestationResponse = credential.response; - - return JSON.stringify({ - id: credential.id, - rawId: arrayBufferToBase64Url(credential.rawId), - type: credential.type, - extensions: credential.getClientExtensionResults(), - response: { - attestationObject: arrayBufferToBase64Url(attestationResponse.attestationObject), - clientDataJSON: arrayBufferToBase64Url(attestationResponse.clientDataJSON), - } - }); -} +async function createCredential(credentialCreateOptions) { + credentialCreateOptions.challenge = base64UrlToArrayBuffer(credentialCreateOptions.challenge); + credentialCreateOptions.user.id = base64UrlToArrayBuffer(credentialCreateOptions.user.id); + credentialCreateOptions.excludeCredentials?.forEach((cred) => { + cred.id = base64UrlToArrayBuffer(cred.id); + }); + + const credential = await navigator.credentials.create({ + publicKey: credentialCreateOptions, + }); + + const attestationResponse = credential.response; + + return JSON.stringify({ + id: credential.id, + rawId: arrayBufferToBase64Url(credential.rawId), + type: credential.type, + extensions: credential.getClientExtensionResults(), + response: { + attestationObject: arrayBufferToBase64Url(attestationResponse.attestationObject), + clientDataJSON: arrayBufferToBase64Url(attestationResponse.clientDataJSON), + transports: attestationResponse.getTransports ? attestationResponse.getTransports() : [], + } + }); +} diff --git a/tests/Api.Tests/Api.Tests.csproj b/tests/Api.Tests/Api.Tests.csproj index 1bc6b3565..66d6cced4 100644 --- a/tests/Api.Tests/Api.Tests.csproj +++ b/tests/Api.Tests/Api.Tests.csproj @@ -2,11 +2,11 @@ - + - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/Common.Tests/Common.Tests.csproj b/tests/Common.Tests/Common.Tests.csproj index 04cd43c8f..3285e9859 100644 --- a/tests/Common.Tests/Common.Tests.csproj +++ b/tests/Common.Tests/Common.Tests.csproj @@ -3,10 +3,10 @@ - + - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/tests/Service.Tests/Service.Tests.csproj b/tests/Service.Tests/Service.Tests.csproj index 30ceeffd6..778e84785 100644 --- a/tests/Service.Tests/Service.Tests.csproj +++ b/tests/Service.Tests/Service.Tests.csproj @@ -3,11 +3,11 @@ - - + + - + runtime; build; native; contentfiles; analyzers; buildtransitive all