-
Notifications
You must be signed in to change notification settings - Fork 1.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support Google Workspace Impersonation Without Service Account Key #2896
Comments
uplifting to be seen . |
Is the same work-around possible using the Node.js client library? |
No. The node.js client library does not provide any workaround options. |
I found that I can use So far today I haven’t been able to get this to work yet. But any thoughts on this approach? |
Let us know if you get that to work and please share code example. |
The relevant part is this function, which uses the function getIdTokenClient (
authClient: AuthClient,
targetAudience: string,
serviceAccountEmail: string,
subjectEmail: string,
scopes: string[]
): IdTokenClient {
const name = `projects/-/serviceAccounts/${serviceAccountEmail}`
const iamClient = new IAMCredentialsClient({ authClient: authClient as any })
const idTokenProvider: IdTokenProvider = {
async fetchIdToken (audience: string): Promise<string> {
const [{ signedJwt }] = await iamClient.signJwt({
name,
payload: JSON.stringify({
iss: serviceAccountEmail,
sub: subjectEmail,
aud: audience,
scope: scopes.join(' ')
})
})
return signedJwt as string
}
}
const idTokenClient = new IdTokenClient({ idTokenProvider, targetAudience })
idTokenClient.refreshHandler = async () => {
const [{ accessToken, expireTime }] = await iamClient.generateAccessToken({
name,
scope: scopes
})
return { access_token: accessToken as string, expiry_date: expireTime as number }
}
return idTokenClient
} |
This would still be great to have. The workaround in this comment functions as expected but seems like unnecessary risk that the library user has to accept in order to get the same functionality as the Python and Java libraries. |
Is your feature request related to a problem? Please describe.
Trying to authorize a Gmail API request to get a Google Workspace account's Gmail delegates via DWD delegated Service Account without a service account key.
Specifically:
Describe the solution you'd like
For the below code to just work. If a new method is needed for this auth that is fine too.
Describe alternatives you've considered
Contacted Google Support and they confirmed there is no way to do this within the current nodejs client library. I am not going to try and create the auth manually without a client library.
Additional context
I am running the code on App Engine and using the default service account for App Engine which has been authorized with DWD to Google Workspace. So no key file should be necessary to authorize the Google API requests.
Existing open issue that is related but may not be the exact same use case as me. googleapis/google-auth-library-nodejs#916
This issue is also present in the Python client library but there is at least a workaround.
https://github.com/GoogleCloudPlatform/professional-services/blob/master/examples/gce-to-adminsdk/main.py
The text was updated successfully, but these errors were encountered: