TLDR:https://id.atlassian.com/outboundAuth/finish always returns 400 with "RequestValidationError: Schema validation error" body.
Story:
We are migrating from Jira Server to Jira Cloud and need to migrate an application we wrote for Jira Server to Jira Cloud Forge and want to use OAuth mechanism to create worklogs in Tempo from Forge App.I installed Tempo Core as well as Tempo Timesheets on our instance longer time ago. Today i did update them to latest versions. (Tempo Core (latest (12.2.0)) Tempo Timesheets (latest (10.1.0)).I created an OAuth2 application in Tempo with Redirect URL: https://id.atlassian.com/outboundAuth/finishI setup our app (that was working with Bearer Tokens before for test purposes and now rewrote Auth to OAuth) with that (redacted) manifest:
modules:jira:globalPage: - key: abwesenheiten-globalresource: mainresolver:function: resolvertitle: Abwesenheitenicon: resource:main;icons/x.pngfunction: - key: resolverhandler: index.handlerproviders:auth: - tempo-oauthresources: - key: mainpath: static/<redacted>/buildremotes: - key: jira-basebaseUrl: https://<redacted>.atlassian.net - key: tempo-apibaseUrl: https://api.eu.tempo.ioproviders:auth: - key: tempo-oauthname: Tempotype: oauth2scopes: - worklogs:writeclientId: <redacted>remotes: - tempo-apibearerMethod: authorization-headeractions:authorization:remote: tempo-apipath: /oauth/authorize/redirectqueryParameters:jira_url: https://<redacted>.atlassian.netexchange:remote: tempo-apipath: /oauth/token/refreshToken:remote: tempo-apipath: /oauth/token/revokeToken:remote: tempo-apipath: /oauth/revoke_token/retrieveProfile:remote: jira-basepath: /rest/api/3/myselfmethod: GETresolvers:id: accountIddisplayName: displayNamepermissions:scopes: - storage:app - read:jira-user - read:jira-work - read:field:jira - read:field-configuration:jira - read:issue:jira - write:jira-work - write:issue:jira - delete:issue:jiraexternal:fetch:backend: - remote: jira-base - remote: tempo-apiapp:runtime:name: nodejs22.xmemoryMB: 256architecture: arm64id: ari:cloud:ecosystem::app/<redacted>
I also set provider secret via forge providers configure -e developmentThere is also some Code to trigger consent screen:
forge providers configure -e development
resolver.define("checkTempoConnection", async (_req) => {const tempoProvider = api.asUser().withProvider("tempo-oauth", "tempo-api");const hasCredentials = await tempoProvider.hasCredentials();if (!hasCredentials) { await tempoProvider.requestCredentials(); }return { connected: true };});
After klicking on Configure Access and doing oAuth dance i finally land on this
But after clicking on "Onwards!" i only get a 400 from https://id.atlassian.com/outboundAuth/finish with Message
RequestValidationError: Schema validation error
and i got no idea what is wrong.
Hi and welcome to the community!
Since this question is related to Forge and app development, have you tried raising this exact post in the Developer Community?
You might have better luck there:
https://community.developer.atlassian.com/
It looks like you're new here. Sign in or register to get started.