找不到信封的 pem:"alg":"RS256","kid":"5a66482db3800c83c63","t

Posted

技术标签:

【中文标题】找不到信封的 pem:"alg":"RS256","kid":"5a66482db3800c83c63","typ":"JWT"【英文标题】:No pem found for envelope: "alg":"RS256","kid":"5a66482db3800c83c63","typ":"JWT"找不到信封的 pem:"alg":"RS256","kid":"5a66482db3800c83c63","typ":"JWT" 【发布时间】:2020-07-26 22:55:55 【问题描述】:

我正在尝试验证和解码前端发送的 id 令牌。 运行验证功能时出现此错误。 有时它可能会起作用。

No pem found for envelope: "alg":"RS256","kid":"53c666482db3800c83c63","typ":"JWT"

这是我的代码

        const ticket = await client.verifyIdToken(
        idToken: token,
        audience: '804312674051-5o4.apps.googleusercontent.com',
    );
    const payload = ticket.getPayload();

【问题讨论】:

想知道您是否能够克服此错误?我也看到了。 这是一个解决方案:***.com/a/61937783/2451044 这是一个非常普遍的错误,发送的令牌可能在很多方面都存在格式错误。我发现我发送的令牌根本不是令牌,而是完全不同的东西。它可能确实表明它是灾难性的错误,而不是它过期或类似...... 【参考方案1】:

我今天终于找到了答案。 Firebase 工具会将原生 Google 连接到第三方登录令牌,然后再封装另一层。此时获得的token不再是谷歌给我们的原始token。

A1: 原始令牌:GoogleDesignInAccount Account = Task.getResult(ApiException.class); Account.getidToken () // 这是原始令牌 B1: Firebase 令牌:FireBaseUser currentUser = Mauth.getCurrentUser (); 字符串令牌 = currentUser.getIdToken(false).getResult().getToken(); A2: Google 官方提供了验证令牌的方法 B2: Firebase 官方提供了身份验证令牌方法

我们为上面的四个数据点使用代号。如果需要在后台验证token的有效性,它们必须相互对应,A1到A2,B1到B2。如果使用 A2 验证 B1 会失败

【讨论】:

【参考方案2】:

问题在于使用的令牌。

您可以使用此示例生成令牌,只需将 content="YOUR_CLIENT_ID.apps.googleusercontent.com" 更改为有效的客户 ID google

在 console.log 中使用生成的令牌进行测试

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="google-signin-client_id" content="YOUR_CLIENT_ID.apps.googleusercontent.com">
    <title>Demo Sing-In</title>
</head>
<body>
    <h1>Google Sing-In</h1>
    <div class="g-signin2" data-onsuccess="onSignIn"></div>
    <a href="#" onclick="signOut();">Sign out</a>
    <script src="https://apis.google.com/js/platform.js" async defer></script>
    <script>
        function onSignIn(googleUser) 
            var profile = googleUser.getBasicProfile();
            console.log('ID: ' + profile.getId()); // Do not send to your backend! Use an ID token instead.
            console.log('Name: ' + profile.getName());
            console.log('Image URL: ' + profile.getImageUrl());
            console.log('Email: ' + profile.getEmail()); // This is null if the 'email' scope is not present.
            var id_token = googleUser.getAuthResponse().id_token;
            console.log(id_token);
        

        function signOut() 
            var auth2 = gapi.auth2.getAuthInstance();
            auth2.signOut().then(function () 
            console.log('User signed out.');
            );
        
    </script>
</body>
</html>

【讨论】:

【参考方案3】:

我遇到了同样的问题....使用我从我的 reactJS 应用程序的 firebase 登录获得的 idToken。

我在 google src 文件中发现了这个

if (!certs.hasOwnProperty(envelope.kid)) 
    // If this is not present, then there's no reason to attempt verification
    throw new Error('No pem found for envelope: ' + JSON.stringify(envelope));
  

但我不知道那是什么意思。

【讨论】:

以上是关于找不到信封的 pem:"alg":"RS256","kid":"5a66482db3800c83c63","t的主要内容,如果未能解决你的问题,请参考以下文章

Twisted SSH curl "'CreateProcess', '系统找不到指定的文件。"

Bundler 找不到 gem "bundle" 的兼容版本

CocoaPods 找不到 pod "RNDateTimePicker" 的兼容版本

Docker / NodeJS: "exec: \"-d\": $PATH 中找不到可执行文件"

CocoaPods 找不到 pod "React/Core" 的兼容版本

Bundler 找不到 gem "spring" 的兼容版本