0

我正在尝试将 SSO 从我的 Laravel 8.13 站点设置到我相关的 Freshdesk 支持门户。

我想要的是登录到我的站点的用户,然后能够单击一个按钮并无缝登录到我的 Freshdesk 支持门户,这样他们就可以在那里查看非公开文档并在需要时提出票证。

使用 Laravel Passport 10.1 我可以创建一个令牌(使用 Postman 测试),但在尝试进行身份验证时从 Freshdesk 收到错误消息。

An error occurred while attempting to retrieve the userinfo resource: could not extract response: no 
suitable httpmessageconverter found for response type [java.util.map<java.lang.string, 
java.lang.object>] and content type [text/html;charset=utf-8]

我以前没有使用过 OAuth 并且遇到了问题。当然,我对 OAuth 的理解可能完全错误,但我发现很难获得有关 Laravel Passport / Freshdesk OAuth 连接的可用文档。

我已经解决了尽可能多的相关 SO 问题,但到目前为止似乎没有什么完全适合我的问题。

我还获得了 Freshdesk 的公开票,并与 Freshdesk 支持成员进行了在线支持会话,但他们告诉我问题在我这边,他们无法提供进一步的帮助。

我原以为要使用的客户端类型是个人访问客户端,但我已经尝试过,以及密码授予客户端,并为两种客户端类型获得了相同的消息(如上)。

就 Freshdesk 上的“用户信息 URL*”字段而言,

用户信息 URL 字段

我努力了

http://testsite.ngrok.io/oauth/tokens
and
http://testsite.ngrok.io/oauth/personal-access-tokens
and 
http://testsite.ngrok.io/api/user

但没有运气 - 关于找不到上述用户信息资源的相同消息。

如果我直接浏览到

http://testsite.ngrok.io/oauth/personal-access-tokens

我得到以下返回:

[{"id":"e595f342722c1045e061f2f026fa7f07181b3d5c69016e9999c5640f1e65928ff6fe2621565ff666c5",
"user_id":43128,"client_id":7,"name":null,"scopes":"openid","email","profile"],"revoked":false,
"created_at":"2021-01-26 10:16:12","updated_at":"2021-01-26 10:16:12", 
"expires_at":"2022-01-26T10:16:12.000000Z","client": 
{"id":7,"user_id":null,"name":"freshworksPersonalAccessClient",
"provider":null,
"redirect":"https:\/\/testsite.freshworks.com\/sp\/OAUTH\/27402945223480041\/callback",
"personal_access_client":true,"password_client":false,"revoked":false,
"created_at":"2021-01-19T23:19:39.000000Z","updated_at":"2021-01-19T23:19:39.000000Z"}}]

所以有些东西被退回了,但我不确定这是否接近 Freshdesk 正在寻找的东西。Freshdesk的支持文档指出:

在此处输入图像描述

但我不知道在哪里创建该信息或需要以什么格式将其发送到 Freshdesk。

我已经看过这个问题,并相信(即使它是针对旧版本的)UserRepository.php 文件中的“getUserEntityByUserCredentials”代码中可能有一些内容,但我已将记录器调用放入该函数中,但似乎没有被称为。

任何帮助都绝对很棒。如果需要任何进一步的信息,请告诉我。

尽管我更愿意将其保留在 Laravel 生态系统中,但我也愿意以任何其他方式将 SSO 设置到 Freshdesk,而无需使用 ADFS、OneLogin、Okta、Azure 等第三方身份提供程序。我只需要完成这件事。

4

1 回答 1

0

解决了。基本上我的问题是用户信息 URL 返回的格式和内容。

我设置了一条路线

/用户信息

到 TestController 中的函数。在该函数中,我解码了 Bearer 令牌以获取 user_id,然后使用它来检索用户详细信息。

然后我创建了一个数组和响应,如下所示:

$thisDecodedUser = User::query()->findOrFail($thisDecodedUserId);

if ($thisDecodedUser) {
    $thisDecodedUserFirstName = $thisDecodedUser->first_name;
    $thisDecodedUserLastName = $thisDecodedUser->last_name;
    $thisDecodedUserEmail = $thisDecodedUser->email;
}


$user_info = array();
$user_info['sub'] = "$thisDecodedUserId";
$user_info['id'] = "$thisDecodedUserId";
$user_info['email'] = "$thisDecodedUserEmail";
$user_info['.id'] = "$thisDecodedUserId";
$user_info['.email'] = "$thisDecodedUserEmail";
$user_info['email_verified'] = "true";

return response(json_encode($user_info))
            ->withHeaders([
                'Content-Type' => 'application/json',
            ]);

代码需要重构,但至少现在可以工作。

于 2021-01-28T01:58:50.787 回答