找不到信封的 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 中找不到可执行文件"