Could not verify AppID/Secret for real-time collaboration service

Still need help?

The Atlassian Community is here for you.

Ask the community


Platform Notice: Data Center Only - This article only applies to Atlassian products on the Data Center platform.

Note that this KB was created for the Data Center version of the product. Data Center KBs for non-Data-Center-specific features may also work for Server versions of the product, however they have not been tested. Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.

*Except Fisheye and Crucible

Problem

Collaborative Editing is enabled, but pages cannot be edited. The follow error appears in the UI when attempting to edit a page:

This page is taking longer to load than usual. Give it a few moments, then try refreshing. Still having issues? Contact your Confluence admin.


In addition to the above message in the UI, the following two messages appear in the atlassian-confluence.log:

postConfigToSynchrony [Collab editing plugin] Synchrony response (502): Could not verify  AppID/Secret for real-time collaboration service at endpoint: https://confluence.example.com/synchrony/v1/apps/secret
This instance could not be registered with Synchrony

Diagnosis

Environment

  • Confluence Data Center 6.x

Diagnostic Steps


DB Troubleshooting

Start by confirming that Confluence has not registered with Synchrony by running this query:

select bandanavalue from bandana where bandanakey = 'synchrony_collaborative_editor_app_registered';

The result expected here is true, which indicates your instance is registered with Synchrony:

# select bandanavalue from bandana where bandanakey = 'synchrony_collaborative_editor_app_registered';
     bandanavalue
-----------------------
 <string>true</string>
(1 row)

If a result of false is received, this indicates your instance is not registered with Synchrony and the additional steps below should be taken to further isolate the issue.


Confirm that the values for synchrony_collaborative_editor_app_id synchrony_collaborative_editor_app_secret in BANDANA do not exist in SECRETS:

select * from bandana where bandanakey in ('synchrony_collaborative_editor_app_id','synchrony_collaborative_editor_app_secret');
select * from "SECRETS";
  • There will typically be either no rows or multiple rows in the SECRETS table
  • The key pair in BANDANA must match one key pair in SECRETS - but it does not matter which one. 

If the key pairs do not match, that indicates the environment is likely facing this issue. Continue with the Network Troubleshooting below. 

Network Troubleshooting

Next, run the following curl command to test the endpoint in question, this will send a dummy-key pair to Synchrony to ensure the two services can communicate:

$ curl -u admin -X POST -H 'Content-Type: application/json' -d '{"appid":"Synchrony-11111111-2222-3333-4444-555555555555","secret":"DC+qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq=","auth-token":null}' http://confluence.example.com/synchrony/v1/apps/secret  | python -mjson.tool


  • The expected response looks like this (200 OK):


Enter host password for user 'admin':
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   246  100   114  100   132    548    634 --:--:-- --:--:-- --:--:--   637
{
    "appid": "Synchrony-11111111-2222-3333-4444-555555555555",
    "secret": "DC+qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq="
}
  • If a different response is received, such as a 502 Bad Gateway, it should provide insight into what is blocking the request.
  • Synchrony does not have a built-in 502 Bad Gateway response code, it only implements the following 5 response codes: 

        /**
         * Post AppID/Secret configuration to Synchrony located at the service URL
         *
         * @param appid
         * @param secret
         * @return If a connection to the provided service URL cannot be made:    503 SERVICE UNAVAILABLE
         * If the AppID doesn't exist, it will be generated /w provided secret:   200 OK
         * If the AppID doesn't exist and the secret is invalid (e.g. too short): 400 BAD
         * If the AppID exists and the secret is correct (verified):              200 OK
         * If the AppID exists and the secret is incorrect:                       400 BAD
         */

Next, confirm the dummy key was received and processed by Synchrony by checking the SECRETS table to confirm it was inserted:

# select * from "SECRETS" where key = 'Synchrony-11111111-2222-3333-4444-555555555555';
                      key                       |                    value
------------------------------------------------+----------------------------------------------
 Synchrony-11111111-2222-3333-4444-555555555555 | DC+qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq=
(1 row)


If the dummy-key pair is not in the SECRETS table, this is evidence of a connection issue during the POST, which should also be revealed in the response to the POST test.

Log Troubleshooting

  1. Enable DEBUG logging for the class org.apache.http
  2. Disable Collaborative Editing
  3. Enable Collaborative Editing
  4. Review the atlassian-confluence.log for http wire logging, which will provide the outbound POST and incoming response from Synchrony, like this example Synchrony is running on http://172.29.76.60:8091 in this example): 

    2019-04-19 16:13:37,235 DEBUG [Long running task: EnableTask] [http.client.protocol.RequestAddCookies] process CookieSpec selected: standard
    2019-04-19 16:13:37,236 DEBUG [Long running task: EnableTask] [http.client.protocol.RequestAuthCache] process Auth cache not set in the context
    2019-04-19 16:13:37,236 DEBUG [Long running task: EnableTask] [http.impl.conn.PoolingHttpClientConnectionManager] requestConnection Connection request: [route: {}->http://172.29.76.60:8091][total kept alive: 0; route allocated: 0 of 2; total allocated: 0 of 20]
    2019-04-19 16:13:37,236 DEBUG [Long running task: EnableTask] [http.impl.conn.PoolingHttpClientConnectionManager] leaseConnection Connection leased: [id: 17][route: {}->http://172.29.76.60:8091][total kept alive: 0; route allocated: 1 of 2; total allocated: 1 of 20]
    2019-04-19 16:13:37,236 DEBUG [Long running task: EnableTask] [http.impl.execchain.MainClientExec] execute Opening connection {}->http://172.29.76.60:8091
    2019-04-19 16:13:37,236 DEBUG [Long running task: EnableTask] [http.impl.conn.DefaultHttpClientConnectionOperator] connect Connecting to /172.29.76.60:8091
    2019-04-19 16:13:37,237 DEBUG [Long running task: EnableTask] [http.impl.conn.DefaultHttpClientConnectionOperator] connect Connection established 172.29.76.60:58958<->172.29.76.60:8091
    2019-04-19 16:13:37,237 DEBUG [Long running task: EnableTask] [http.impl.conn.DefaultManagedHttpClientConnection] setSocketTimeout http-outgoing-17: set socket timeout to 10000
    2019-04-19 16:13:37,237 DEBUG [Long running task: EnableTask] [http.impl.execchain.MainClientExec] execute Executing request GET /synchrony/heartbeat HTTP/1.1
    2019-04-19 16:13:37,237 DEBUG [Long running task: EnableTask] [http.impl.execchain.MainClientExec] execute Target auth state: UNCHALLENGED
    2019-04-19 16:13:37,237 DEBUG [Long running task: EnableTask] [http.impl.execchain.MainClientExec] execute Proxy auth state: UNCHALLENGED
    2019-04-19 16:13:37,237 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-17 >> GET /synchrony/heartbeat HTTP/1.1
    2019-04-19 16:13:37,238 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-17 >> Host: 172.29.76.60:8091
    2019-04-19 16:13:37,238 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-17 >> Connection: Keep-Alive
    2019-04-19 16:13:37,238 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-17 >> User-Agent: Apache-HttpClient/4.5.5 (Java/1.8.0_131)
    2019-04-19 16:13:37,238 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-17 >> Accept-Encoding: gzip,deflate
    2019-04-19 16:13:37,238 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 >> "GET /synchrony/heartbeat HTTP/1.1[\r][\n]"
    2019-04-19 16:13:37,238 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 >> "Host: 172.29.76.60:8091[\r][\n]"
    2019-04-19 16:13:37,238 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 >> "Connection: Keep-Alive[\r][\n]"
    2019-04-19 16:13:37,238 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 >> "User-Agent: Apache-HttpClient/4.5.5 (Java/1.8.0_131)[\r][\n]"
    2019-04-19 16:13:37,238 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 >> "Accept-Encoding: gzip,deflate[\r][\n]"
    2019-04-19 16:13:37,238 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 >> "[\r][\n]"
    2019-04-19 16:13:37,243 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 << "HTTP/1.1 200 OK[\r][\n]"
    2019-04-19 16:13:37,244 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 << "Content-Type: text/plain[\r][\n]"
    2019-04-19 16:13:37,244 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 << "Access-Control-Allow-Origin: *[\r][\n]"
    2019-04-19 16:13:37,244 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 << "Access-Control-Allow-Headers: content-type, accept, x-token, x-atlassian-mau-ignore[\r][\n]"
    2019-04-19 16:13:37,244 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 << "Access-Control-Allow-Methods: GET, PUT, POST, OPTIONS[\r][\n]"
    2019-04-19 16:13:37,244 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 << "Access-Control-Max-Age: 86400[\r][\n]"
    2019-04-19 16:13:37,245 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 << "Server: Aleph/0.4.1[\r][\n]"
    2019-04-19 16:13:37,245 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 << "Connection: Keep-Alive[\r][\n]"
    2019-04-19 16:13:37,245 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 << "Date: Fri, 19 Apr 2019 21:13:37 GMT[\r][\n]"
    2019-04-19 16:13:37,245 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 << "content-length: 3[\r][\n]"
    2019-04-19 16:13:37,245 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 << "[\r][\n]"
    2019-04-19 16:13:37,245 DEBUG [Long running task: EnableTask] [org.apache.http.wire] wire http-outgoing-17 << "OK[\n]"
    2019-04-19 16:13:37,246 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-17 << HTTP/1.1 200 OK
    2019-04-19 16:13:37,246 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-17 << Content-Type: text/plain
    2019-04-19 16:13:37,246 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-17 << Access-Control-Allow-Origin: *
    2019-04-19 16:13:37,246 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-17 << Access-Control-Allow-Headers: content-type, accept, x-token, x-atlassian-mau-ignore
    2019-04-19 16:13:37,246 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-17 << Access-Control-Allow-Methods: GET, PUT, POST, OPTIONS
    2019-04-19 16:13:37,246 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-17 << Access-Control-Max-Age: 86400
    2019-04-19 16:13:37,246 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-17 << Server: Aleph/0.4.1
    2019-04-19 16:13:37,246 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-17 << Connection: Keep-Alive
    2019-04-19 16:13:37,246 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-17 << Date: Fri, 19 Apr 2019 21:13:37 GMT
    2019-04-19 16:13:37,247 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-17 << content-length: 3
    2019-04-19 16:13:37,247 DEBUG [Long running task: EnableTask] [http.impl.execchain.MainClientExec] execute Connection can be kept alive indefinitely
    2019-04-19 16:13:37,247 DEBUG [Long running task: EnableTask] [http.impl.conn.DefaultManagedHttpClientConnection] close http-outgoing-17: Close connection
    2019-04-19 16:13:37,247 DEBUG [Long running task: EnableTask] [http.impl.execchain.MainClientExec] releaseConnection Connection discarded
    2019-04-19 16:13:37,247 DEBUG [Long running task: EnableTask] [http.impl.conn.PoolingHttpClientConnectionManager] releaseConnection Connection released: [id: 17][route: {}->http://172.29.76.60:8091][total kept alive: 0; route allocated: 0 of 2; total allocated: 0 of 20]
    2019-04-19 16:13:37,262 INFO [Long running task: EnableTask] [plugins.synchrony.tasks.AbstractConfigLongRunningTask] execute Removed 0 stale shared drafts.
    2019-04-19 16:13:37,277 WARN [Long running task: EnableTask] [plugins.synchrony.config.DefaultSynchronyConfigurationManager] enableSharedDrafts [Collab editing plugin] Enabling Shared Drafts
     -- url: /c6612/rest/synchrony-interop/enable | referer: http://localhost:26612/c6612/admin/confluence-collaborative-editor-plugin/configure.action | traceId: 4061d8ce1f4bf007 | userName: admin
    2019-04-19 16:13:37,320 DEBUG [Long running task: EnableTask] [http.client.protocol.RequestAddCookies] process CookieSpec selected: standard
    2019-04-19 16:13:37,320 DEBUG [Long running task: EnableTask] [http.client.protocol.RequestAuthCache] process Auth cache not set in the context
    2019-04-19 16:13:37,320 DEBUG [Long running task: EnableTask] [http.impl.conn.PoolingHttpClientConnectionManager] requestConnection Connection request: [route: {}->http://172.29.76.60:8091][total kept alive: 1; route allocated: 1 of 20; total allocated: 1 of 20]
    2019-04-19 16:13:37,322 DEBUG [Long running task: EnableTask] [http.impl.conn.PoolingHttpClientConnectionManager] leaseConnection Connection leased: [id: 0][route: {}->http://172.29.76.60:8091][total kept alive: 0; route allocated: 1 of 20; total allocated: 1 of 20]
    2019-04-19 16:13:37,322 DEBUG [Long running task: EnableTask] [http.impl.conn.DefaultManagedHttpClientConnection] setSocketTimeout http-outgoing-0: set socket timeout to 0
    2019-04-19 16:13:37,323 DEBUG [Long running task: EnableTask] [http.impl.execchain.MainClientExec] execute Executing request POST /synchrony/v1/apps/secret HTTP/1.1
    2019-04-19 16:13:37,323 DEBUG [Long running task: EnableTask] [http.impl.execchain.MainClientExec] execute Target auth state: UNCHALLENGED
    2019-04-19 16:13:37,323 DEBUG [Long running task: EnableTask] [http.impl.execchain.MainClientExec] execute Proxy auth state: UNCHALLENGED
    2019-04-19 16:13:37,323 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-0 >> POST /synchrony/v1/apps/secret HTTP/1.1
    2019-04-19 16:13:37,323 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-0 >> content-type: application/json
    2019-04-19 16:13:37,323 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-0 >> Content-Length: 132
    2019-04-19 16:13:37,324 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-0 >> Host: 172.29.76.60:8091
    2019-04-19 16:13:37,324 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-0 >> Connection: Keep-Alive
    2019-04-19 16:13:37,324 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-0 >> User-Agent: Apache-HttpClient/4.5.5 (Java/1.8.0_131)
    2019-04-19 16:13:37,324 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-0 >> Accept-Encoding: gzip,deflate
    2019-04-19 16:13:37,343 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << HTTP/1.1 200 OK
    2019-04-19 16:13:37,344 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Content-Type: application/json;charset=utf-8
    2019-04-19 16:13:37,344 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Access-Control-Allow-Origin: *
    2019-04-19 16:13:37,344 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Access-Control-Allow-Headers: content-type, accept, x-token, x-atlassian-mau-ignore
    2019-04-19 16:13:37,344 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Access-Control-Allow-Methods: GET, PUT, POST, OPTIONS
    2019-04-19 16:13:37,344 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Access-Control-Max-Age: 86400
    2019-04-19 16:13:37,344 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Server: Aleph/0.4.1
    2019-04-19 16:13:37,345 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Connection: Keep-Alive
    2019-04-19 16:13:37,345 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Date: Fri, 19 Apr 2019 21:13:36 GMT
    2019-04-19 16:13:37,345 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << content-length: 114
    2019-04-19 16:13:37,345 DEBUG [Long running task: EnableTask] [http.impl.execchain.MainClientExec] execute Connection can be kept alive indefinitely
    2019-04-19 16:13:37,345 DEBUG [Long running task: EnableTask] [http.impl.conn.PoolingHttpClientConnectionManager] releaseConnection Connection [id: 0][route: {}->http://172.29.76.60:8091] can be kept alive indefinitely
    2019-04-19 16:13:37,346 DEBUG [Long running task: EnableTask] [http.impl.conn.DefaultManagedHttpClientConnection] setSocketTimeout http-outgoing-0: set socket timeout to 0
    2019-04-19 16:13:37,346 DEBUG [Long running task: EnableTask] [http.impl.conn.PoolingHttpClientConnectionManager] releaseConnection Connection released: [id: 0][route: {}->http://172.29.76.60:8091][total kept alive: 1; route allocated: 1 of 20; total allocated: 1 of 20]
    2019-04-19 16:13:37,352 DEBUG [Long running task: EnableTask] [http.client.protocol.RequestAddCookies] process CookieSpec selected: standard
    2019-04-19 16:13:37,352 DEBUG [Long running task: EnableTask] [http.client.protocol.RequestAuthCache] process Auth cache not set in the context
    2019-04-19 16:13:37,353 DEBUG [Long running task: EnableTask] [http.impl.conn.PoolingHttpClientConnectionManager] requestConnection Connection request: [route: {}->http://172.29.76.60:8091][total kept alive: 1; route allocated: 1 of 20; total allocated: 1 of 20]
    2019-04-19 16:13:37,353 DEBUG [Long running task: EnableTask] [http.impl.conn.PoolingHttpClientConnectionManager] leaseConnection Connection leased: [id: 0][route: {}->http://172.29.76.60:8091][total kept alive: 0; route allocated: 1 of 20; total allocated: 1 of 20]
    2019-04-19 16:13:37,353 DEBUG [Long running task: EnableTask] [http.impl.conn.DefaultManagedHttpClientConnection] setSocketTimeout http-outgoing-0: set socket timeout to 0
    2019-04-19 16:13:37,353 DEBUG [Long running task: EnableTask] [http.impl.execchain.MainClientExec] execute Executing request POST /synchrony/v1/apps/secret HTTP/1.1
    2019-04-19 16:13:37,353 DEBUG [Long running task: EnableTask] [http.impl.execchain.MainClientExec] execute Target auth state: UNCHALLENGED
    2019-04-19 16:13:37,353 DEBUG [Long running task: EnableTask] [http.impl.execchain.MainClientExec] execute Proxy auth state: UNCHALLENGED
    2019-04-19 16:13:37,353 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-0 >> POST /synchrony/v1/apps/secret HTTP/1.1
    2019-04-19 16:13:37,354 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-0 >> content-type: application/json
    2019-04-19 16:13:37,354 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-0 >> Content-Length: 138
    2019-04-19 16:13:37,354 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-0 >> Host: 172.29.76.60:8091
    2019-04-19 16:13:37,354 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-0 >> Connection: Keep-Alive
    2019-04-19 16:13:37,354 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-0 >> User-Agent: Apache-HttpClient/4.5.5 (Java/1.8.0_131)
    2019-04-19 16:13:37,354 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onRequestSubmitted http-outgoing-0 >> Accept-Encoding: gzip,deflate
    2019-04-19 16:13:37,361 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << HTTP/1.1 200 OK
    2019-04-19 16:13:37,361 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Content-Type: application/json;charset=utf-8
    2019-04-19 16:13:37,361 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Access-Control-Allow-Origin: *
    2019-04-19 16:13:37,361 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Access-Control-Allow-Headers: content-type, accept, x-token, x-atlassian-mau-ignore
    2019-04-19 16:13:37,361 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Access-Control-Allow-Methods: GET, PUT, POST, OPTIONS
    2019-04-19 16:13:37,362 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Access-Control-Max-Age: 86400
    2019-04-19 16:13:37,362 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Server: Aleph/0.4.1
    2019-04-19 16:13:37,362 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Connection: Keep-Alive
    2019-04-19 16:13:37,362 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << Date: Fri, 19 Apr 2019 21:13:36 GMT
    2019-04-19 16:13:37,362 DEBUG [Long running task: EnableTask] [org.apache.http.headers] onResponseReceived http-outgoing-0 << content-length: 120
    2019-04-19 16:13:37,362 DEBUG [Long running task: EnableTask] [http.impl.execchain.MainClientExec] execute Connection can be kept alive indefinitely
    2019-04-19 16:13:37,362 DEBUG [Long running task: EnableTask] [http.impl.conn.PoolingHttpClientConnectionManager] releaseConnection Connection [id: 0][route: {}->http://172.29.76.60:8091] can be kept alive indefinitely
    2019-04-19 16:13:37,363 DEBUG [Long running task: EnableTask] [http.impl.conn.DefaultManagedHttpClientConnection] setSocketTimeout http-outgoing-0: set socket timeout to 0
    2019-04-19 16:13:37,363 DEBUG [Long running task: EnableTask] [http.impl.conn.PoolingHttpClientConnectionManager] releaseConnection Connection released: [id: 0][route: {}->http://172.29.76.60:8091][total kept alive: 1; route allocated: 1 of 20; total allocated: 1 of 20]
  5. Confirm the HTTP response code after this line: 

    onRequestSubmitted http-outgoing-0 >> POST /synchrony/v1/apps/secret HTTP/1.1
  6. If there is not a 200 OK like this example, there is an issue: 

    onResponseReceived http-outgoing-0 << HTTP/1.1 200 OK

Cause

This issue occurs when Confluence cannot exchange the AppID and Secret with Synchrony due to something in the environment blocking a POST to: <base-url>/synchrony/v1/apps/secret

When Collaborative Editing is enabled, a key pair is generated and stored in the BANDANA table. Then, the key pair is POST-ed to the endpoint /synchrony/v1/apps/secret, processed by Synchrony, and then Synchrony inserts the keys into the SECRETS table. This allows Confluence and Synchrony to then communicate with each other securely.

When the keys are not received by Synchrony, but Collaborative Editing is enabled, the Collaborative Editing admin page may show a green status for both Synchrony and Collaborative Editing:

However, editing pages or creating new pages will still fail with this message:

This page is taking longer to load than usual. Give it a few moments, then try refreshing. Still having issues? Contact your Confluence admin.

For further testing and a temporary workaround until the infrastructure issue can be resolved, see the Temporary Workaround section below.

Resolution

Determine what network infrastructure is traversed when Confluence sends the POST to Synchrony, and why it is preventing the POST from being successfully received by Synchrony.

Infrastructure such as an authentication proxy may sit between Confluence and Synchrony, and block the HTTP POST method, but not the GET method.

The infrastructure configuration will need to be adjusted to accommodate the requirement for Confluence to be able to POST data to Synchrony.

Temporary Workaround

While the POST to  <base-url>/synchrony/v1/apps/secret may fail, you can temporarily overcome this issue by manually inserting the key pair from BANDANA into the SECRETS table. This should not be considered a fix and only should be used to further validate and test the issue in a lower environment. 

(warning) This workaround is not supported in Production environments.

Always back up your data before performing any modifications to the database. If possible, test any alter, insert, update, or delete SQL commands on a staging server first.

Steps:

  • Ensure Confluence is running and Collaborative Editing is enabled

  • Run this SQL to obtain the key pair from the BANDANA table: 

    select * from bandana where bandanakey in ('synchrony_collaborative_editor_app_id','synchrony_collaborative_editor_app_secret');


    • Example: 

      # select * from bandana where bandanakey in ('synchrony_collaborative_editor_app_id','synchrony_collaborative_editor_app_secret');
       bandanaid | bandanacontext |                bandanakey                 |                          bandanavalue
      -----------+----------------+-------------------------------------------+-----------------------------------------------------------------
              57 | _GLOBAL        | synchrony_collaborative_editor_app_id     | <string>Synchrony-8aecf0c3-c475-3932-a399-078f0d8d9713</string>
              58 | _GLOBAL        | synchrony_collaborative_editor_app_secret | <string>y1M83GR2n/uxKObDxIlRCmhqx5WJhpaibtYKTFug9sI=</string>
      (2 rows)
  • Take the above synchrony_collaborative_editor_app_id and synchrony_collaborative_editor_app_secret values, and insert them into the SECRETS table like this example: 

    INSERT INTO "SECRETS" ("key","value")
    values ('Synchrony-8aecf0c3-c475-3932-a399-078f0d8d9713','y1M83GR2n/uxKObDxIlRCmhqx5WJhpaibtYKTFug9sI=');
  • Flip the registered flag to True: 

    UPDATE bandana set bandanavalue ='<string>true</string>' where bandanakey = 'synchrony_collaborative_editor_app_registered';
  • Restart Confluence, but do not restart Collaborative Editing (leave it enabled)

  • Attempt to edit a page, it should be successful. 

  • Any other Collaborative Editing / Synchrony issues should be troubleshot separately

Description
This page is taking longer to load than usual. Give it a few moments, then try refreshing. Still having issues? Contact your Confluence admin.
Could not verify  AppID/Secret for real-time collaboration service at endpoint

This instance could not be registered with Synchrony

ProductConfluence Data Center, Confluence Server

Last modified on Sep 16, 2022

Was this helpful?

Yes
No
Provide feedback about this article
Powered by Confluence and Scroll Viewport.