JWT Identity not working
Hi,
I have the SDK for android and I try to setup JWT Identity for chat and support modules.
I have a webhook defined as in the doc. It work. I see in the log that zendesk is sending the user token I give him in the JwtIdentity and it returns a jwt as specified in the doc with name, email, jti and iat.
Code of the webhook :
router.post('/jwt', async (req, res, next) => {
try {
console.log(req.body)
const user_token = req.body.user_token
const user = await usersService.findByTokend(user_token)
if (typeof user === "undefined" || user === null) {
return res.status(404).send('No user found').end()
}
const token = jwt.sign({
name: `${user.lastname} ${user.firstname}`.toLowerCase().trim(),
email: user.email.toLowerCase().trim(),
},
JWT_SECRET,
{
expiresIn: '12h',
jwtid: uuidv4()
})
console.log(token)
return res.status(200).send({
jwt: token
}).end()
} catch (err) {
console.log(err)
next(err)
}
})
Nothing goes wrong in the log of my webhook and in my SDK implementation during initialisation. It's when I call the activity and it try to authenticate the user that it fail.
For chat instance I have defined a JwtAuthenticator as follow :
public class ZendeskJwtAuthenticator implements JwtAuthenticator {
private String user_token;
public void setUserToken(String user_token) {
this.user_token = user_token;
}
@Override
public void getToken(JwtCompletion jwtCompletion) {
try {
OkHttpClient client = new OkHttpClient();
JSONObject jsonBody = new JSONObject();
jsonBody.put("user_token", user_token);
RequestBody requestJsonBody = RequestBody.create(
jsonBody.toString(),
MediaType.parse("application/json")
);
Request postRequest = new Request.Builder()
.url(url)
.post(requestJsonBody)
.build();
client.newCall(postRequest).enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
jwtCompletion.onError();
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
try {
String body = response.body().string();
JsonObject jsonObject = JsonParser.parseString(body).getAsJsonObject();
if (jsonObject.has("jwt")) {
jwtCompletion.onTokenLoaded(jsonObject.get("jwt").getAsString());
} else {
jwtCompletion.onError();
}
} catch (Exception e) {
jwtCompletion.onError();
}
}
});
} catch (Exception exception) {
jwtCompletion.onError();
}
}
}
I call set identity as follow :
private void setUserIdentity(String user_token) {
Identity identity = new JwtIdentity(user_token);
ZendeskJwtAuthenticator autenticator = new ZendeskJwtAuthenticator();
autenticator.setUserToken(user_token);
Zendesk.INSTANCE.setIdentity(identity);
Chat.INSTANCE.setIdentity(autenticator);
}
It is called after init :
Zendesk.INSTANCE.init(appContext, zendeskUrl, appId, clientId);
Chat.INSTANCE.init(appContext, chatKey, chatAppId);
Support.INSTANCE.init(Zendesk.INSTANCE);
this.setUserIdentity(options);
In the log I have that when I open chat :
I/okhttp.OkHttpClient: --> POST https://id.zopim.com/authenticated/web/jwt (318-byte body)
I/ReactNativeJNI: Memory warning (pressure level: TRIM_MEMORY_RUNNING_CRITICAL) received by JS VM, running a GC
I/okhttp.OkHttpClient: <-- 400 https://id.zopim.com/authenticated/web/jwt (2412ms, 63-byte body)
W/JwtLoginDetailsProvider: Error fetching authentication token. There may be an issue with your JWT. Chat will proceed unauthenticated: 400
And when I open help center :
I/okhttp.OkHttpClient: --> GET https://<company>.zendesk.com/hc/api/mobile/fr/article_tree.json?category_ids=§ion_ids=&include=categories%2Csections&limit=5&article_labels=&per_page=1000&sort_by=created_at&sort_order=desc
I/okhttp.OkHttpClient: --> POST https://<company>.zendesk.com/access/sdk/jwt (22-byte body)
I/okhttp.OkHttpClient: <-- 403 https://<company>.zendesk.com/access/sdk/jwt (3350ms, unknown-length body)
I/okhttp.OkHttpClient: <-- 400 Response body was null, failed to auth user. https://<company>.zendesk.com/hc/api/mobile/fr/article_tree.json?category_ids=§ion_ids=&include=categories%2Csections&limit=5&article_labels=&per_page=1000&sort_by=created_at&sort_order=desc (3359ms, 2-byte body)
-
I really need help as it is blocking me from using help center and ticket history.
-
Hi Maxime,
I'll be helping you with this issue in the ticket you've created about it. This will allow us to discuss some info specific to your account.
Best,
-
Can you please help me , after enabled JWT in admin portal. HelpCentreActivity, RequestListActivity, MessageActivity is not working in android mobile App
-
Hi Kartik,
Can you share what navigation steps you're taking in the app? Also is the app crashing? Or are you just not seeing the JWT identity set?
Iniciar sesión para dejar un comentario.
4 Comentarios