首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Zendesk SDK JwtAuthentication不工作

Zendesk SDK JwtAuthentication不工作
EN

Stack Overflow用户
提问于 2022-03-16 09:00:45
回答 1查看 248关注 0票数 0

我有用于android的SDK,我尝试为聊天和支持模块设置JWT标识。

我在文档中定义了一个web钩子。起作用了。我在日志中看到,zendesk正在发送我在JwtIdentity中给他的用户令牌,它返回在文档中指定的一个jwt,其中包含名称、电子邮件、jti和iat。

网络钩子的代码:

代码语言:javascript
代码运行次数:0
运行
复制
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)
    }
})

在初始化过程中,我的web钩子日志和我的SDK实现中没有什么问题。当我调用该活动并试图对用户进行身份验证时,它失败了。

对于聊天实例,我定义了一个JwtAuthenticator如下:

代码语言:javascript
代码运行次数:0
运行
复制
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();
        }
    }
}

我称之为集合身份如下:

代码语言:javascript
代码运行次数:0
运行
复制
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);
}

它在init之后被称为:

代码语言:javascript
代码运行次数:0
运行
复制
Zendesk.INSTANCE.init(appContext, zendeskUrl, appId, clientId);
Chat.INSTANCE.init(appContext, chatKey, chatAppId);
Support.INSTANCE.init(Zendesk.INSTANCE);
this.setUserIdentity(options);

在日志中,当我打开聊天时,我有这样的信息:

代码语言:javascript
代码运行次数:0
运行
复制
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

当我打开帮助中心的时候:

代码语言:javascript
代码运行次数:0
运行
复制
I/okhttp.OkHttpClient: --> GET https://<company>.zendesk.com/hc/api/mobile/fr/article_tree.json?category_ids=&section_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=&section_ids=&include=categories%2Csections&limit=5&article_labels=&per_page=1000&sort_by=created_at&sort_order=desc (3359ms, 2-byte body)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-27 13:38:38

我找到了解决办法,如果有人带着同样的问题到这里来的话。

事实上,我确实有很好的配置和工作。我唯一的错误是我用同一封电子邮件来识别我在应用程序中的客户和我的zendesk管理员.

就这样。祝你今天愉快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71494215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档