diff --git a/client_ref.ts b/client_ref.ts deleted file mode 100644 index daecde0..0000000 --- a/client_ref.ts +++ /dev/null @@ -1,125 +0,0 @@ -// import * as oidc from "openid-client"; -// import * as dotenv from "dotenv"; - -// dotenv.config(); - - - -// process.env -// const server = new URL("http://localhost:3000"); - -// // Discover the provider metadata - -// // const as = await oidc.discovery(server, "application", undefined, undefined, { execute: [oidc.allowInsecureRequests] }); - -// // console.dir(as.clientMetadata()); - -// // // Register a new client -// const client = await oidc.dynamicClientRegistration(server, { -// redirect_uris: ["http://foo.com"], -// grant_types: ["authorization_code", "refresh_token"], -// response_types: ["code"], -// token_endpoint_auth_method: "client_secret_basic", -// }, undefined, {execute: [oidc.allowInsecureRequests]}); - -// console.log(client.serverMetadata()) -// console.log(client.clientMetadata()) - -// const state = oidc.randomState(); -// const codeVerifier = oidc.randomPKCECodeVerifier(); - -// const codeChallenge = await oidc.calculatePKCECodeChallenge(codeVerifier); - -// const authUrl = oidc.buildAuthorizationUrl(as, { -// client_id: client.client_id, -// redirect_uri: "http://localhost:4000/callback", -// response_type: "code", -// scope: "openid offline_access", -// state, -// code_challenge: codeChallenge, -// code_challenge_method: "S256", -// }); - - -// console.log(Object.getOwnPropertyNames(client)); - -import * as oid from 'openid-client' - -// Prerequisites - -let getCurrentUrl!: (...args: any) => URL -let server!: URL // Authorization server's Issuer Identifier URL -let clientId!: string -let clientSecret!: string -/** - * Value used in the authorization request as redirect_uri pre-registered at the - * Authorization Server. - */ -let redirect_uri!: string - -// End of prerequisites - -let config = await oid.discovery(server, clientId, clientSecret) - -let code_challenge_method = 'S256' -/** - * The following (code_verifier and potentially nonce) MUST be generated for - * every redirect to the authorization_endpoint. You must store the - * code_verifier and nonce in the end-user session such that it can be recovered - * as the user gets redirected from the authorization server back to your - * application. - */ -let code_verifier = oid.randomPKCECodeVerifier() -let code_challenge = await oid.calculatePKCECodeChallenge(code_verifier) -let nonce!: string - -{ - // redirect user to as.authorization_endpoint - let parameters: Record = { - redirect_uri, - scope: 'openid email', - code_challenge, - code_challenge_method, - } - - /** - * We cannot be sure the AS supports PKCE so we're going to use nonce too. Use - * of PKCE is backwards compatible even if the AS doesn't support it which is - * why we're using it regardless. - */ - if (!config.serverMetadata().supportsPKCE()) { - nonce = oid.randomNonce() - parameters.nonce = nonce - } - - let redirectTo = oid.buildAuthorizationUrl(config, parameters) - - console.log('redirecting to', redirectTo.href) - // now redirect the user to redirectTo.href -} - -// one eternity later, the user lands back on the redirect_uri -// Authorization Code Grant -let sub: string -let access_token: string -{ - let currentUrl: URL = getCurrentUrl() - let tokens = await oid.authorizationCodeGrant(config, currentUrl, { - pkceCodeVerifier: code_verifier, - expectedNonce: nonce, - idTokenExpected: true, - }) - - console.log('Token Endpoint Response', tokens) - ;({ access_token } = tokens) - let claims = tokens.claims()! - console.log('ID Token Claims', claims) - ;({ sub } = claims) -} - -// UserInfo Request -{ - let userInfo = await oid.fetchUserInfo(config, access_token, sub) - - console.log('UserInfo Response', userInfo) -}