Merge pull request #9308 from backstage/eide/add-custom-callbackurl-to-providers

[auth-backend]: Add custom `callbackUrl` support to additional providers
This commit is contained in:
Johan Haals
2022-02-03 10:36:35 +01:00
committed by GitHub
11 changed files with 55 additions and 10 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-auth-backend': patch
---
Added custom `callbackUrl` support for multiple providers. `v0.8.0` introduced this change for `github`, and now we're adding the same capability to the following providers: `atlassian, auth0, bitbucket, gitlab, google, microsoft, oauth2, oidc, okta, onelogin`.
@@ -205,7 +205,10 @@ export const createAtlassianProvider = (
const clientId = envConfig.getString('clientId');
const clientSecret = envConfig.getString('clientSecret');
const scopes = envConfig.getString('scopes');
const callbackUrl = `${globalConfig.baseUrl}/${providerId}/handler/frame`;
const customCallbackUrl = envConfig.getOptionalString('callbackUrl');
const callbackUrl =
customCallbackUrl ||
`${globalConfig.baseUrl}/${providerId}/handler/frame`;
const catalogIdentityClient = new CatalogIdentityClient({
catalogApi,
@@ -231,6 +234,7 @@ export const createAtlassianProvider = (
disableRefresh: true,
providerId,
tokenIssuer,
callbackUrl,
});
});
};
@@ -228,7 +228,10 @@ export const createAuth0Provider = (
const clientId = envConfig.getString('clientId');
const clientSecret = envConfig.getString('clientSecret');
const domain = envConfig.getString('domain');
const callbackUrl = `${globalConfig.baseUrl}/${providerId}/handler/frame`;
const customCallbackUrl = envConfig.getOptionalString('callbackUrl');
const callbackUrl =
customCallbackUrl ||
`${globalConfig.baseUrl}/${providerId}/handler/frame`;
const catalogIdentityClient = new CatalogIdentityClient({
catalogApi,
@@ -259,6 +262,7 @@ export const createAuth0Provider = (
disableRefresh: true,
providerId,
tokenIssuer,
callbackUrl,
});
});
};
@@ -280,7 +280,10 @@ export const createBitbucketProvider = (
OAuthEnvironmentHandler.mapConfig(config, envConfig => {
const clientId = envConfig.getString('clientId');
const clientSecret = envConfig.getString('clientSecret');
const callbackUrl = `${globalConfig.baseUrl}/${providerId}/handler/frame`;
const customCallbackUrl = envConfig.getOptionalString('callbackUrl');
const callbackUrl =
customCallbackUrl ||
`${globalConfig.baseUrl}/${providerId}/handler/frame`;
const catalogIdentityClient = new CatalogIdentityClient({
catalogApi,
@@ -309,6 +312,7 @@ export const createBitbucketProvider = (
disableRefresh: false,
providerId,
tokenIssuer,
callbackUrl,
});
});
};
@@ -236,7 +236,10 @@ export const createGitlabProvider = (
const clientSecret = envConfig.getString('clientSecret');
const audience = envConfig.getOptionalString('audience');
const baseUrl = audience || 'https://gitlab.com';
const callbackUrl = `${globalConfig.baseUrl}/${providerId}/handler/frame`;
const customCallbackUrl = envConfig.getOptionalString('callbackUrl');
const callbackUrl =
customCallbackUrl ||
`${globalConfig.baseUrl}/${providerId}/handler/frame`;
const catalogIdentityClient = new CatalogIdentityClient({
catalogApi,
@@ -272,6 +275,7 @@ export const createGitlabProvider = (
disableRefresh: false,
providerId,
tokenIssuer,
callbackUrl,
});
});
};
@@ -266,7 +266,10 @@ export const createGoogleProvider = (
OAuthEnvironmentHandler.mapConfig(config, envConfig => {
const clientId = envConfig.getString('clientId');
const clientSecret = envConfig.getString('clientSecret');
const callbackUrl = `${globalConfig.baseUrl}/${providerId}/handler/frame`;
const customCallbackUrl = envConfig.getOptionalString('callbackUrl');
const callbackUrl =
customCallbackUrl ||
`${globalConfig.baseUrl}/${providerId}/handler/frame`;
const catalogIdentityClient = new CatalogIdentityClient({
catalogApi,
@@ -304,6 +307,7 @@ export const createGoogleProvider = (
disableRefresh: false,
providerId,
tokenIssuer,
callbackUrl,
});
});
};
@@ -276,7 +276,10 @@ export const createMicrosoftProvider = (
const clientSecret = envConfig.getString('clientSecret');
const tenantId = envConfig.getString('tenantId');
const callbackUrl = `${globalConfig.baseUrl}/${providerId}/handler/frame`;
const customCallbackUrl = envConfig.getOptionalString('callbackUrl');
const callbackUrl =
customCallbackUrl ||
`${globalConfig.baseUrl}/${providerId}/handler/frame`;
const authorizationUrl = `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/authorize`;
const tokenUrl = `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`;
@@ -318,6 +321,7 @@ export const createMicrosoftProvider = (
disableRefresh: false,
providerId,
tokenIssuer,
callbackUrl,
});
});
};
@@ -240,7 +240,10 @@ export const createOAuth2Provider = (
OAuthEnvironmentHandler.mapConfig(config, envConfig => {
const clientId = envConfig.getString('clientId');
const clientSecret = envConfig.getString('clientSecret');
const callbackUrl = `${globalConfig.baseUrl}/${providerId}/handler/frame`;
const customCallbackUrl = envConfig.getOptionalString('callbackUrl');
const callbackUrl =
customCallbackUrl ||
`${globalConfig.baseUrl}/${providerId}/handler/frame`;
const authorizationUrl = envConfig.getString('authorizationUrl');
const tokenUrl = envConfig.getString('tokenUrl');
const scope = envConfig.getOptionalString('scope');
@@ -288,6 +291,7 @@ export const createOAuth2Provider = (
disableRefresh,
providerId,
tokenIssuer,
callbackUrl,
});
});
};
@@ -264,7 +264,10 @@ export const createOidcProvider = (
OAuthEnvironmentHandler.mapConfig(config, envConfig => {
const clientId = envConfig.getString('clientId');
const clientSecret = envConfig.getString('clientSecret');
const callbackUrl = `${globalConfig.baseUrl}/${providerId}/handler/frame`;
const customCallbackUrl = envConfig.getOptionalString('callbackUrl');
const callbackUrl =
customCallbackUrl ||
`${globalConfig.baseUrl}/${providerId}/handler/frame`;
const metadataUrl = envConfig.getString('metadataUrl');
const tokenSignedResponseAlg = envConfig.getOptionalString(
'tokenSignedResponseAlg',
@@ -313,6 +316,7 @@ export const createOidcProvider = (
disableRefresh: false,
providerId,
tokenIssuer,
callbackUrl,
});
});
};
@@ -276,7 +276,10 @@ export const createOktaProvider = (
const clientId = envConfig.getString('clientId');
const clientSecret = envConfig.getString('clientSecret');
const audience = envConfig.getString('audience');
const callbackUrl = `${globalConfig.baseUrl}/${providerId}/handler/frame`;
const customCallbackUrl = envConfig.getOptionalString('callbackUrl');
const callbackUrl =
customCallbackUrl ||
`${globalConfig.baseUrl}/${providerId}/handler/frame`;
// This is a safe assumption as `passport-okta-oauth` uses the audience
// as the base for building the authorization, token, and user info URLs.
@@ -322,6 +325,7 @@ export const createOktaProvider = (
disableRefresh: false,
providerId,
tokenIssuer,
callbackUrl,
});
});
};
@@ -227,7 +227,10 @@ export const createOneLoginProvider = (
const clientId = envConfig.getString('clientId');
const clientSecret = envConfig.getString('clientSecret');
const issuer = envConfig.getString('issuer');
const callbackUrl = `${globalConfig.baseUrl}/${providerId}/handler/frame`;
const customCallbackUrl = envConfig.getOptionalString('callbackUrl');
const callbackUrl =
customCallbackUrl ||
`${globalConfig.baseUrl}/${providerId}/handler/frame`;
const catalogIdentityClient = new CatalogIdentityClient({
catalogApi,
@@ -258,6 +261,7 @@ export const createOneLoginProvider = (
disableRefresh: false,
providerId,
tokenIssuer,
callbackUrl,
});
});
};