diff --git a/action.yml b/action.yml
index 40af8838..5978bced 100644
--- a/action.yml
+++ b/action.yml
@@ -21,6 +21,13 @@ inputs:
   token:
     description: Used to pull node distributions from node-versions. Since there's a default, this is typically not supplied by the user. When running this action on github.com, the default value is sufficient. When running on GHES, you can pass a personal access token for github.com if you are experiencing rate limiting.
     default: ${{ github.server_url == 'https://github.com' && github.token || '' }}
+  registry-url2:
+    description: 'Optional 2nd registry to set up for auth. Will set the registry in a project level .npmrc and .yarnrc file, and set up auth to read in from env.NODE_AUTH_TOKEN2.'
+  scope2:
+    description: 'Optional 2nd scope for authenticating against scoped registries. Will fall back to the repository owner when using the GitHub Packages registry (https://npm.pkg.github.com/).'
+  token2:
+    description: Optional 2nd token for authenticating against a 2nd registry. When running this action on github.com, the default value is sufficient. When running on GHES, you can pass a personal access token for github.com if you are experiencing rate limiting.
+    default: ${{ github.server_url == 'https://github.com' && github.token || '' }}    
   cache:
     description: 'Used to specify a package manager for caching in the default directory. Supported values: npm, yarn, pnpm.'
   cache-dependency-path:
diff --git a/dist/setup/index.js b/dist/setup/index.js
index 0512f3a7..b0ecc711 100644
--- a/dist/setup/index.js
+++ b/dist/setup/index.js
@@ -92462,31 +92462,25 @@ var __importStar = (this && this.__importStar) || function (mod) {
     return result;
 };
 Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.configAuthentication = void 0;
+exports.configAuthentication2 = exports.configAuthentication = void 0;
 const fs = __importStar(__nccwpck_require__(7147));
 const os = __importStar(__nccwpck_require__(2037));
 const path = __importStar(__nccwpck_require__(1017));
 const core = __importStar(__nccwpck_require__(2186));
 const github = __importStar(__nccwpck_require__(5438));
 function configAuthentication(registryUrl, alwaysAuth) {
-    const npmrc = path.resolve(process.env['RUNNER_TEMP'] || process.cwd(), '.npmrc');
+    writeRegistryToFile(registryUrl, alwaysAuth, 'NODE_AUTH_TOKEN');
+}
+exports.configAuthentication = configAuthentication;
+function getFileLocation() {
+    return path.resolve(process.env['RUNNER_TEMP'] || process.cwd(), '.npmrc');
+}
+function writeRegistryToFile(registryUrl, alwaysAuth, tokenEnvVar) {
+    const fileLocation = getFileLocation();
     if (!registryUrl.endsWith('/')) {
         registryUrl += '/';
     }
-    writeRegistryToFile(registryUrl, npmrc, alwaysAuth);
-}
-exports.configAuthentication = configAuthentication;
-function writeRegistryToFile(registryUrl, fileLocation, alwaysAuth) {
-    let scope = core.getInput('scope');
-    if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
-        scope = github.context.repo.owner;
-    }
-    if (scope && scope[0] != '@') {
-        scope = '@' + scope;
-    }
-    if (scope) {
-        scope = scope.toLowerCase() + ':';
-    }
+    const scope = getScope('scope', registryUrl);
     core.debug(`Setting auth in ${fileLocation}`);
     let newContents = '';
     if (fs.existsSync(fileLocation)) {
@@ -92499,15 +92493,32 @@ function writeRegistryToFile(registryUrl, fileLocation, alwaysAuth) {
         });
     }
     // Remove http: or https: from front of registry.
-    const authString = registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${NODE_AUTH_TOKEN}';
+    const authString = registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${' + tokenEnvVar + '}';
     const registryString = `${scope}registry=${registryUrl}`;
     const alwaysAuthString = `always-auth=${alwaysAuth}`;
     newContents += `${authString}${os.EOL}${registryString}${os.EOL}${alwaysAuthString}`;
     fs.writeFileSync(fileLocation, newContents);
     core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation);
     // Export empty node_auth_token if didn't exist so npm doesn't complain about not being able to find it
-    core.exportVariable('NODE_AUTH_TOKEN', process.env.NODE_AUTH_TOKEN || 'XXXXX-XXXXX-XXXXX-XXXXX');
+    core.exportVariable(tokenEnvVar, process.env[tokenEnvVar] || 'XXXXX-XXXXX-XXXXX-XXXXX');
 }
+function getScope(scopeKey, registryUrl) {
+    let scope = core.getInput(scopeKey);
+    if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
+        scope = github.context.repo.owner;
+    }
+    if (scope && scope[0] != '@') {
+        scope = '@' + scope;
+    }
+    if (scope) {
+        scope = scope.toLowerCase() + ':';
+    }
+    return scope;
+}
+function configAuthentication2(registryUrl2, alwaysAuth2) {
+    writeRegistryToFile(registryUrl2, alwaysAuth2, 'NODE_AUTH_TOKEN2');
+}
+exports.configAuthentication2 = configAuthentication2;
 
 
 /***/ }),
@@ -93697,6 +93708,11 @@ function run() {
             const alwaysAuth = core.getInput('always-auth');
             if (registryUrl) {
                 auth.configAuthentication(registryUrl, alwaysAuth);
+                const registryUrl2 = core.getInput('registry-url2');
+                if (registryUrl2) {
+                    const alwaysAuth2 = core.getInput('always-auth2');
+                    auth.configAuthentication2(registryUrl2, alwaysAuth2);
+                }
             }
             if (cache && (0, cache_utils_1.isCacheFeatureAvailable)()) {
                 core.saveState(constants_1.State.CachePackageManager, cache);
diff --git a/src/authutil.ts b/src/authutil.ts
index 2ce94939..eb16e5dc 100644
--- a/src/authutil.ts
+++ b/src/authutil.ts
@@ -5,33 +5,29 @@ import * as core from '@actions/core';
 import * as github from '@actions/github';
 
 export function configAuthentication(registryUrl: string, alwaysAuth: string) {
-  const npmrc: string = path.resolve(
+
+  writeRegistryToFile(registryUrl, alwaysAuth, 'NODE_AUTH_TOKEN');
+}
+
+function getFileLocation(): string {
+  return path.resolve(
     process.env['RUNNER_TEMP'] || process.cwd(),
     '.npmrc'
   );
-  if (!registryUrl.endsWith('/')) {
-    registryUrl += '/';
-  }
-
-  writeRegistryToFile(registryUrl, npmrc, alwaysAuth);
 }
 
 function writeRegistryToFile(
   registryUrl: string,
-  fileLocation: string,
-  alwaysAuth: string
+  alwaysAuth: string,
+  tokenEnvVar: string
 ) {
-  let scope: string = core.getInput('scope');
-  if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
-    scope = github.context.repo.owner;
-  }
-  if (scope && scope[0] != '@') {
-    scope = '@' + scope;
-  }
-  if (scope) {
-    scope = scope.toLowerCase() + ':';
+  const fileLocation: string = getFileLocation();
+  if (!registryUrl.endsWith('/')) {
+    registryUrl += '/';
   }
 
+  const scope: string = getScope('scope', registryUrl);
+
   core.debug(`Setting auth in ${fileLocation}`);
   let newContents = '';
   if (fs.existsSync(fileLocation)) {
@@ -45,7 +41,7 @@ function writeRegistryToFile(
   }
   // Remove http: or https: from front of registry.
   const authString: string =
-    registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${NODE_AUTH_TOKEN}';
+    registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${' + tokenEnvVar + '}';
   const registryString = `${scope}registry=${registryUrl}`;
   const alwaysAuthString = `always-auth=${alwaysAuth}`;
   newContents += `${authString}${os.EOL}${registryString}${os.EOL}${alwaysAuthString}`;
@@ -53,7 +49,24 @@ function writeRegistryToFile(
   core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation);
   // Export empty node_auth_token if didn't exist so npm doesn't complain about not being able to find it
   core.exportVariable(
-    'NODE_AUTH_TOKEN',
-    process.env.NODE_AUTH_TOKEN || 'XXXXX-XXXXX-XXXXX-XXXXX'
+    tokenEnvVar, process.env[tokenEnvVar] || 'XXXXX-XXXXX-XXXXX-XXXXX'
   );
 }
+function getScope(scopeKey: string, registryUrl: string) {
+  let scope: string = core.getInput(scopeKey);
+  if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
+    scope = github.context.repo.owner;
+  }
+  if (scope && scope[0] != '@') {
+    scope = '@' + scope;
+  }
+  if (scope) {
+    scope = scope.toLowerCase() + ':';
+  }
+  return scope;
+}
+
+export function configAuthentication2(registryUrl2: string, alwaysAuth2: string) {
+
+  writeRegistryToFile(registryUrl2, alwaysAuth2, 'NODE_AUTH_TOKEN2');
+}
diff --git a/src/main.ts b/src/main.ts
index ac051766..66c954b8 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -58,6 +58,11 @@ export async function run() {
     const alwaysAuth: string = core.getInput('always-auth');
     if (registryUrl) {
       auth.configAuthentication(registryUrl, alwaysAuth);
+      const registryUrl2: string = core.getInput('registry-url2');
+      if (registryUrl2) {
+        const alwaysAuth2: string = core.getInput('always-auth2');
+        auth.configAuthentication2(registryUrl2, alwaysAuth2);
+      }
     }
 
     if (cache && isCacheFeatureAvailable()) {