Oscar Yu
04/28/2025, 2:17 PM<http://auth.cloud.gooddata.com|auth.cloud.gooddata.com> refused to connect.
Julius Kos
04/28/2025, 6:42 PMOscar Yu
04/28/2025, 7:50 PMMichael Ullock
04/28/2025, 10:31 PMOscar Yu
04/29/2025, 4:10 AMMauricio Cabezas
04/29/2025, 9:07 AMOscar Yu
04/29/2025, 2:21 PMconst jwt = require('jsonwebtoken');
...
const user = {
_id: u._id,
company,
email: u.email,
name: u.name,
phone: u.phone,
photo: u.photo,
username: u.username,
appId,
...
};
const token = jwt.sign(user, process.env.JWT_STRATEGY_SECRET, {
expiresIn,
});
...
Oscar Yu
04/29/2025, 3:04 PMJulius Kos
04/29/2025, 3:08 PMJulius Kos
04/29/2025, 3:16 PM"msg":"Stored JWT token cannot be decoded: Cannot read ID Token from the session: JWT (sub=auth0|6706eb6425c08a6859d3812a) has expired.., cause: null","orgId":"nwgtqc8odk"}
Could you please double-check that?Julius Kos
04/29/2025, 3:17 PMOscar Yu
04/29/2025, 3:23 PMOscar Yu
04/29/2025, 3:26 PMprocess.env.JWT_STRATEGY_SECRET
with the GD JWK private or public key?Julius Kos
04/29/2025, 5:11 PMprocess.env.JWT_STRATEGY_SECRET
with anything from GoodData. You keep using your own private key to sign JWTs, and GoodData uses the uploaded public JWK to verify them. Your app fully controls user authentication and JWT signing — the JWK is only for verification on GoodData’s side.Oscar Yu
04/29/2025, 5:22 PM*<http://auth.cloud.gooddata.com|auth.cloud.gooddata.com>* refused to connect.
message on the pageJulius Kos
04/29/2025, 5:43 PMJulius Kos
04/29/2025, 5:54 PM"Stored JWT token cannot be decoded: Cannot read ID Token from the session: JWT (sub=auth0|6706eb6425c08a6859d3812a) has expired..,
Julius Kos
04/29/2025, 5:57 PMJulius Kos
04/29/2025, 7:06 PMYou can confirm the JWK was uploaded correctly by making a GET call to the same API endpoint. Your JWK should be saved as:
{
"data": {
"attributes": {
"content": {
"kty": "RSA",
"alg": "RS256",
"use": "sig",
"kid": "67C2BC3D-32E4-4C8C-93EF-9B03F0E65A3A",
"x5t": "oLe3EKODu72OtVftIu8_WGaPWk8",
"x5c": [
"MIICujCCAaKgAwIBAgIECI8fsTANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDExR0ZXN0LWFsZXgucmVhY2g1Lm5ldDAeFw0yMDA3MjkwOTM0MjlaFw0yMjAyMTcxNDIwMzNaMB8xHTAbBgNVBAMTFHRlc3QtYWxleC5yZWFjaDUubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlzRszUeQ4WiSqvmYxMP10ngm8ALIoUwMH7Oa8vrZgD5pqalPjetPAxeVcAv2gTyDlOwtB0fGvlQo6n78pd9pTbgrzUjhmFuYN6OCfT6eN/2wu0LmwryFS2mbh7/1DTiKd2tZaRalskPECXTKkeks85HVqanB0860BYlGvQvfgrvhCWXXFJJeXvNwYNFYdDdrFQhoeOAEvRDKg9DdHZf6XzSR6Qk3w51FKn2b7imen/G52itD/kIen1hqqB2Jwt9SWyX5MSGySY2QwC18F6Dfs8L+t0mwCo6grGW9264Z5vlO0PWssEqGIX/ez6nk1ZdHXhoXwJ0W+6QzeQlUN8jNoQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQAETbMWro4HI4ZuqtnjMZrgEOpx6WhAtxpMx5XFPVWbdp/DpPySotoWbbD6qCtYc34E+ec7mH7aHVap+Gl2IyeSHTht4FXfF9q/1Oj/fis/4DDi1iq00rJsU18D71mZ9FGWCWlO1nhW1KSTGbRJ3E0wSrNabcvaXcwEHokR3zm+xfRWjtbrq2hQ19R16xyOLVy4zrF95QxP4UN+Cvm8nmYur6bSqv+gCMvDsl+O/gtRHGgpUukHEJwnee1R3+1aIv+9zOF3HaaUC5neOLBFITGmeXgi8G2IhbG+JoXh/GUkb66TZUlUAM3qXYNL9Nf+2MQ7nAPTXcxlmImFUUrnv0c3"
],
"e": "AQAB",
"n": "wAwTHQIRVkX4m6lI0ayO1b7FnR4hgH9KFQJPHO7i11zJ6exhs7nzS4WGTlOMzM_j17O3zcBEYfe1P65rhikRhRuYU3cBmqQGxTQEZcTqmOSZxjB7TPukp7R57IvbmYuHFZjxqSQQpazopvCCMHO5OECilT_Md_xuZtdZDehOYNwZM880kN0KKtGFDXDQzC110uk0R_mVatuPY1ZIe0lYnfkokKqfWma849zpcpJE5MiIIxTFsFANsRW3he72EodoDMEhYZnUOQ4dGk_t3OiY-NgtRKtI1vW5T-rsZ0Tl3oRqJmXPeE5TP8bC3n-nm_SJPtDyc2Q-8CO1EITIZR8Ikw"
}
},
"id": "jwk-1",
"type": "jwk"
}
}
Julius Kos
04/29/2025, 7:07 PMOscar Yu
05/01/2025, 1:34 AM{
"data": {
"id": "clockworkDeliveryGoodDataKeyId",
"type": "jwk",
"attributes": {
"content": {
"kty": "RSA",
"alg": "RS256",
"use": "sig",
"x5c": [
"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"
],
"n": "ojVDY-mibfx5sYxcyoX2ruj3eMHCTzzSf2t3sYPa3mfXc8hZo8yYYXjYaL2HdgBNTjaj3jw3KxyAcb4BQD_h32EYg-4fNYM4grV3kaG0hLY9WdqtQpcamgfJCsGCx0eLPLXbOyW9iNqtYuBiYtHJA7dNtn82IKW_xYciXtaNU3v_ATBtu8VR46qqK4hgC4G9BefGTQd7BrJZRprd7hChH57MTnkhwdvekCmiFwt3BZ3-uZh0f7u-GhegHqjkSaERPhdHRaBuQe90SDgY-Skr5GsnT4MyhvZwO8p69GsN4QPzXRUMCsKam1srzWAwSwJ6zw4aHkRvOpbfMwrkkeG6UoDc1bBlv82HowdCT7WX--0lUFTHfmyDJns7qvaHSyFLnUF3zZCNqOUdm9Glh7R979ZbmdiBehCVOskEDVGbsLNAPj3on5dynx9FoAj3RkWBKDsfM6h4fa3AGl8C3rET1ECsBwAm89WYvrPX7WBldT-DFV4Jx852nJjosBPl-QHkKBcQJ7ubBLR-s5FJHz7q0E2HNhH4GOMpSlwvTvTTV-t1QUwUr0vTsatHPGsUsfhW_us59fvr4SjBX6Dtf9osMRKCX0ipintV5TjgSUUgvO2lSJG135Tzr8NsLBRhT2XPfZe0EpKMDZLH0MTxg9eNDbqgquo-uGkRPzxg0tmc_K0",
"e": "AQAB",
"kid": "clockworkDeliveryGoodDataKeyId",
"x5t": "_JR9NVaOWKkSSXoqxXdKP86yfvU"
}
}
},
"links": {
"self": "<https://clockworkdelivery.cloud.gooddata.com/api/v1/entities/jwks/clockworkDeliveryGoodDataKeyId>"
}
}
Oscar Yu
05/01/2025, 1:38 AMJulius Kos
05/01/2025, 1:56 PMOscar Yu
05/01/2025, 4:27 PMUncaught (in promise) O: No session or session expired
and Refused to frame '<https://auth.cloud.gooddata.com/>' because an ancestor violates the following Content Security Policy directive: "frame-ancestors 'none'".
Julius Kos
05/01/2025, 4:30 PMOscar Yu
05/01/2025, 4:34 PMframe-ancestor
error comes from <https://auth.cloud.gooddata.com/>
Oscar Yu
05/01/2025, 4:35 PMJulius Kos
05/01/2025, 4:37 PMJohn K Chang
05/01/2025, 5:17 PMJan Kos
05/02/2025, 9:58 AM?apiTokenAuthentication=true
query parameter otherwise the auth falls back to default OIDC flow.
https://www.gooddata.com/docs/cloud/embed-visualizations/iframes/embed-dashboard-via-iframe/#example-of-authentication-using-injected-jwt
Could you please verify this?Oscar Yu
05/02/2025, 2:38 PMOscar Yu
05/02/2025, 2:57 PMOscar Yu
05/02/2025, 6:18 PMOscar Yu
05/02/2025, 6:24 PMOscar Yu
05/06/2025, 1:55 AMJan Kos
05/06/2025, 6:53 AMJan Kos
05/06/2025, 6:55 AMOscar Yu
05/06/2025, 5:17 PMsub
attribute into the token... coding...Oscar Yu
05/06/2025, 5:59 PM{
"alg": "HS256",
"typ": "JWT"
}
Payload:
{
"_id": "dc8ce542daf63e7f14a5b32",
"sub": "dc8ce542daf63e7f14a5b32",
"iss": "portal-api",
"iat": 1746553538,
"active": true,
"cntryCd": "+1",
"company": {
"_id": "3e12119d74xxx",
"config": "c3e32b279xxx",
"name": "WallMaltz",
"businessType": "shipper",
"parentId": "dc8ce542daf63e7f14a5b41",
"utcOffset": "-8"
},
"created": "2019-02-20T00:41:41.414Z",
"email": "angel@angels.com",
"isSuper": false,
"name": "La Angels",
"phone": "+17025550001",
"roles": [
{
"isDefault": false,
"_id": "xxx4f172c035d",
"company": "xxx4624f17xxx",
"created": "2019-01-15T17:02:09.915Z",
"roleCd": "admin",
"__v": 125
}
],
"username": "angel@angels.com",
"appId": "com.google.firefox",
"identifyKey": "36524c3e-xxxx-1724babbc0b3",
"lastLoginDt": "2022-11-04T15:23:49.046Z",
"exp": 1747763138
}
Oscar Yu
05/06/2025, 6:06 PMOscar Yu
05/06/2025, 6:20 PMOscar Yu
05/06/2025, 7:04 PMHTTP/1.1 401 Unauthorized
Date: Tue, 06 May 2025 19:03:24 GMT
Content-Length: 0
Connection: close
Vary: Origin, Access-Control-Request-Method, Access-Control-Request-Headers
WWW-Authenticate: Bearer error="invalid_token", error_description="The JWT contains invalid claims.", error_uri="<https://tools.ietf.org/html/rfc6750#section-3.1>"
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=63072000; includeSubDomains
X-XSS-Protection: 0
Referrer-Policy: no-referrer
Jan Kos
05/06/2025, 8:57 PM"action":"login","exc":"...JwtVerificationException: The JWT contains invalid claims.
However this is a general error and its thrown when JWT validation fails. Mandatory claims that should be included in the token are "name", "sub", "iat", "exp"
, additional claims (attributes) shouldn’t cause an issue as long as mandatory are present.
I noticed in decoded token you provided - "alg": "HS256"
algorithm, but our supported algorithms are RS256, RS384, RS512
that could be a problem. Also missing kid
in JWT might cause an issue as the attributes which key should be used to verify JWT.Jan Kos
05/06/2025, 8:59 PMJan Kos
05/07/2025, 7:55 AM"action":"login","authenticationMethod":"JWT","exc":"....Exception: An error occurred while attempting to decode the Jwt
and
Caused by: ...: Signed JWT rejected: Another algorithm expected, or no matching key(s) found
which supports the aboveOscar Yu
05/07/2025, 10:36 PMOscar Yu
05/08/2025, 7:37 PM{
"alg": "RS256",
"typ": "JWT",
"kid": "xxxxxxxGoodDataKeyId"
}
and payload:
{
"sub": "iiiiiiiiiii",
"id": "iiiiiiiiiii",
"name": "CWAdmin",
"company": "xxxxxxxxxx",
"iat": 1746727676,
"jti": "3acd9fc7-f45b-4f3f-a534-5e411203ac5a",
"exp": 1746814076
}
and we are now getting a 404 error when calling the profile endpointOscar Yu
05/08/2025, 7:37 PM{
"title": "Not Found",
"status": 404,
"detail": "The requested endpoint does not exist or you do not have permission to access it.",
"traceId": "d11df71b868383a21b8b6fd6b74414aa"
}
Jan Kos
05/09/2025, 12:23 PM{
"traceId": "d11df71b868383a21b8b6fd6b74414aa",
"msg": "Not Found",
"exc": "No user found for API ID"
}
This error indicates that user for the given token wasn’t found on the backend. Could you please double-check that appropriate user exists in your GD Cloud organization and that sub
claim is correctly populated with userId
from your GD cloud organization?Oscar Yu
05/09/2025, 9:02 PMJan Kos
05/12/2025, 9:24 AMOscar Yu
05/12/2025, 2:20 PMJan Kos
05/13/2025, 12:39 PMOscar Yu
05/14/2025, 4:01 PM