错误 "message":"Undefined index: jwt" 的原因可能是什么?

What could be the reason for error "message":"Undefined index: jwt"?

对于我的在线平台,我正在设置一个基本的 google 登录按钮,用户可以通过该按钮创建一个帐户或使用他们的 gmail 电子邮件地址登录。 我创建了我的 凭据 :OAuth 2.0 客户端 ID(同时获得 ID 和密码)和服务帐户(现已删除 - 在请求用户批准访问时不需要)。 对于 oauth 同意屏幕,我添加了我的非敏感范围:

./auth/userinfo.email
./auth/userinfo.profile
openid

我正在使用我自己的 gmail 地址进行测试,API url 使用的是 https://www.googleapis.com/oauth2/v2/userinfo? email 字段上的查询。

编辑:我已经删除了服务帐户所以忽略它: 我也使用服务帐户电子邮件 (XXX-googleconnect@genial-analyzer-341XXX...) 和(相当长的)生成的密钥设置了我的 jwt 标志。

当我 运行 google API?

时,你能告诉我如何调试错误“消息”:“未定义的索引:jwt”吗?

编辑:我修改了我的代码以反映服务帐户的删除。所以不再有 jwt 令牌:"jwt_bearer": "false",

<?php
$exports = <<<'JSON'
{
  "name": "oauth",
  "module": "oauth",
  "action": "provider",
  "options": {
    "jwt_bearer": "false",
    "service": "google",
    "client_id": "307540412021-test06test06test06test06test06.apps.googleusercontent.com",
    "client_secret": "XXXXX-X0RMDgT1nEgxAKrOmpcjK4sXY7Qq",
    "tokenHandling": "self"
  },
  "meta": [
    {
      "name": "access_token",
      "type": "text"
    }
  ],
  "outputType": "object"
}
JSON;
?>

但现在我得到了"message":"Undefined index: false",

免责声明:我是一个没有编码的人,具有基本的 php 知识,如果您能使用一种易于理解的语言,我将不胜感激(并且很有帮助对于其他非编码人员我敢打赌)

提前致谢。

您需要了解的是,服务帐户授权、Oauth2 和登录之间存在很大差异。

如果您 运行 oauth2 授权并请求使用电子邮件和个人资料范围的访问权限,您将有权访问用户个人资料信息。

如果您尝试 运行 服务帐户身份验证并请求电子邮件和配置文件范围,您要么会收到错误,要么会获取服务帐户配置文件信息。作为服务帐户是虚拟用户。

"message":"Undefined index: jwt"

向我暗示您为错误的客户端使用了错误的代码。

服务帐户客户凭据

function getServiceAccountClient() {
    try {   
        // Create and configure a new client object.        
        $client = new Google_Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope([YOUR SCOPES HERE]);
        return $client;
    } catch (Exception $e) {
        print "An error occurred: " . $e->getMessage();
    }
}

Oauth2 客户端

function getGoogleClient() {
    $client = getOauth2Client();

    // Refresh the token if it's expired.
    if ($client->isAccessTokenExpired()) {
        $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
        file_put_contents($credentialsPath, json_encode($client->getAccessToken()));
    }
return $client;
}

/**
 * Builds the Google client object.
 * Documentation: https://developers.google.com/identity/protocols/OAuth2
 * Scopes will need to be changed depending upon the API's being accessed.
 * Example:  array(Google_Service_Analytics::ANALYTICS_READONLY, Google_Service_Analytics::ANALYTICS)
 * List of Google Scopes: https://developers.google.com/identity/protocols/googlescopes
 * @return A google client object.
 */
function buildClient(){
    
    $client = new Google_Client();
    $client->setAccessType("offline");        // offline access.  Will result in a refresh token
    $client->setIncludeGrantedScopes(true);   // incremental auth
    $client->setAuthConfig(__DIR__ . '/client_secrets.json');
    $client->addScope([YOUR SCOPES HERE]);
    $client->setRedirectUri(getRedirectUri());  
    return $client;
}

如您所见,每种授权类型的代码完全不同。

我的主要问题是,如果您要让用户登录您的应用,为什么还要尝试将服务帐户授权混入其中?