From 9830ecc8f37c2532cfd3541c4c2b8d7f0c42dc16 Mon Sep 17 00:00:00 2001 From: Frederik Rothenberger Date: Mon, 11 Jul 2022 12:49:26 +0200 Subject: [PATCH] Implement canister chosen alternative origins for principal derivation (#733) This feature allows applications to move to other origins while keeping the original user principals. See the specification in docs/internet-identity-spec.adoc for more details. --- ...authenticate-derivation-origin-desktop.png | Bin 0 -> 56133 bytes ...-authenticate-derivation-origin-mobile.png | Bin 0 -> 31720 bytes src/canister_tests/src/framework.rs | 2 +- .../src/flows/authenticate/fetchDelegation.ts | 11 +- src/frontend/src/flows/authenticate/index.ts | 83 ++++- .../authenticate/postMessageInterface.ts | 19 +- .../authenticate/validateDerivationOrigin.ts | 76 +++++ src/frontend/src/test-e2e/selenium.test.ts | 286 +++++++++++++++++- src/frontend/src/test-e2e/views.ts | 66 ++++ src/internet_identity/src/http.rs | 5 +- 10 files changed, 514 insertions(+), 34 deletions(-) create mode 100644 screenshots/27-authenticate-derivation-origin-desktop.png create mode 100644 screenshots/27-authenticate-derivation-origin-mobile.png create mode 100644 src/frontend/src/flows/authenticate/validateDerivationOrigin.ts diff --git a/screenshots/27-authenticate-derivation-origin-desktop.png b/screenshots/27-authenticate-derivation-origin-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..c34f3d2906303459fd1970623ebc099f3ffb1a26 GIT binary patch literal 56133 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 YC;PijUr#Kkq3$v^+Vdm#ho64_FRYg3iU0rr literal 0 HcmV?d00001 diff --git a/screenshots/27-authenticate-derivation-origin-mobile.png b/screenshots/27-authenticate-derivation-origin-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..f786a45a936ab992047a56f2db2a85662cf3cbd1 GIT binary patch literal 31720 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

A~E_j7TW;#L7^KjQ?p{!ggp&Q-Sw6hT^OKp9+nM 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 literal 0 HcmV?d00001 diff --git a/src/canister_tests/src/framework.rs b/src/canister_tests/src/framework.rs index 63c8d97e76..92bf1b3a6e 100644 --- a/src/canister_tests/src/framework.rs +++ b/src/canister_tests/src/framework.rs @@ -363,7 +363,7 @@ xr-spatial-tracking=()", assert!(Regex::new( "^default-src 'none';\ -connect-src 'self' https://ic0.app;\ +connect-src 'self' https://ic0.app https://\\*\\.ic0.app;\ img-src 'self' data:;\ script-src 'sha256-[a-zA-Z0-9/=+]+' 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https:;\ base-uri 'none';\ diff --git a/src/frontend/src/flows/authenticate/fetchDelegation.ts b/src/frontend/src/flows/authenticate/fetchDelegation.ts index 87a269abe1..165762d937 100644 --- a/src/frontend/src/flows/authenticate/fetchDelegation.ts +++ b/src/frontend/src/flows/authenticate/fetchDelegation.ts @@ -21,9 +21,16 @@ export const fetchDelegation = async ( authContext: AuthContext ): Promise<[PublicKey, Delegation]> => { const sessionKey = Array.from(authContext.authRequest.sessionPublicKey); + + // at this point, derivationOrigin is either validated or undefined + const derivationOrigin = + authContext.authRequest.derivationOrigin !== undefined + ? authContext.authRequest.derivationOrigin + : authContext.requestOrigin; + const [userKey, timestamp] = await loginResult.connection.prepareDelegation( loginResult.userNumber, - authContext.requestOrigin, + derivationOrigin, sessionKey, authContext.authRequest.maxTimeToLive ); @@ -31,7 +38,7 @@ export const fetchDelegation = async ( const signed_delegation = await retryGetDelegation( loginResult.connection, loginResult.userNumber, - authContext.requestOrigin, + derivationOrigin, sessionKey, timestamp ); diff --git a/src/frontend/src/flows/authenticate/index.ts b/src/frontend/src/flows/authenticate/index.ts index 5814548544..adfb54acb3 100644 --- a/src/frontend/src/flows/authenticate/index.ts +++ b/src/frontend/src/flows/authenticate/index.ts @@ -19,8 +19,13 @@ import waitForAuthRequest, { AuthContext } from "./postMessageInterface"; import { toggleErrorMessage } from "../../utils/errorHelper"; import { fetchDelegation } from "./fetchDelegation"; import { registerIfAllowed } from "../../utils/registerAllowedCheck"; +import { validateDerivationOrigin } from "./validateDerivationOrigin"; -const pageContent = (hostName: string, userNumber?: bigint) => html`