繁体   English   中英

Laravel 护照; 将 OAuth2 与 Freshdesk 一起用于 SSO

[英]Laravel Passport; using OAuth2 for SSO with Freshdesk

我正在尝试将 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 支持成员的在线支持 session,但他们告诉我问题出在我这边,他们无能为力。

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

就 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”代码中可能有一些内容,但我已经在 function 中放置了记录器调用,但似乎没有被称为。

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

虽然我更愿意将其保留在 Laravel 生态系统中,但我也愿意在不使用第三方身份提供程序(如 ADFS、OneLogin、Okta、Azure 等)的情况下将 SSO 设置到 Freshdesk 的任何其他方式。 我只需要完成这件事。

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

我设置了一条路线

/用户信息

到 TestController 中的 function。 在 function 中,我解码了 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',
            ]);

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

感谢您在此答案中为我指明正确的方向: https://stackoverflow.com/a/65929987/920598

即使您使用的数组包含未使用的键。

实际上,可用字段及其格式在此处描述https://support.freshdesk.com/en/support/solutions/articles/50000002088-configuring-custom-sso-policies-under-org

例如,如果您想同步名字、姓氏和语言,则需要设置以下键:

<?php
$user_info = [
    'sub' => (string)$user->id,
    'unique_id' => (string)$user->id,
    'email' => $user->email,
    'FirstName' => (string)$user->firstname,
    'LastName' => (string)$user->lastname,
    'language' => $user->default_ln === 1 ? 'fr' : 'en'
];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM