相关疑难解决方法(0)

Node.js - "未定义btoa"错误

在我的node.js应用程序中,我做了一个,npm install btoa-atob以便我可以使用btoa()和atob()函数,这些函数在客户端javascript中是原生的,但由于某种原因未包含在节点中.新目录显示在我的node_modules文件夹中,该文件夹本身与app.js一起位于root目录中.然后我确保在我的package.json文件中添加btoa-atob作为依赖项,该文件位于root中.

但是,由于某种原因,它仍然无法正常工作.

console.log(btoa("Hello World!"));
Run Code Online (Sandbox Code Playgroud)

^应该输出"SGVsbG8gV29ybGQh"到控制台,但我得到错误"btoa不是defiend".

我没有正确安装吗?我忽略了什么?

node.js

184
推荐指数
10
解决办法
10万
查看次数

使用Javascript的atob解码base64不能正确解码utf-8字符串

我正在使用Javascript window.atob()函数来解码base64编码的字符串(特别是GitHub API中的base64编码内容).问题是我得到了ASCII编码的字符(â¢而不是).如何正确处理传入的base64编码流,以便将其解码为utf-8?

javascript encoding utf-8

84
推荐指数
7
解决办法
12万
查看次数

使用 keycloak userinfo 端点获取用户角色

如何获取 keycloak 中 userinfo 端点的回复中包含的角色。我在 keycloak 中为用户定义了一个“角色映射”。当我调用 userinfo 端点时,我得到了电子邮件名称等字段,但回复中不包含角色。当我调用 auth 端点时,我得到了 access_token 并且在字段范围中包含了角色。这是来自 auth 端点的回复:

access_token" QJsonValue(string, "eyJhb...")
"expires_in" QJsonValue(double, 300)
"not-before-policy" QJsonValue(double, 0)
"refresh_expires_in" QJsonValue(double, 1800)
"refresh_token" QJsonValue(string, "eyJhb...")
"scope" QJsonValue(string, "profile email roles")
"session_state" QJsonValue(string, "20b48536-4b38-4aa6-9072-e8309833402e")
"token_type" QJsonValue(string, "bearer")
Run Code Online (Sandbox Code Playgroud)

我还尝试使用属性“scope=roles”调用 userinfo 端点,但这不起作用。

openid-connect keycloak

9
推荐指数
3
解决办法
4594
查看次数

如何解码 google OAuth 2.0 JWT/凭证令牌?

我正在构建一个浏览器应用程序,需要使用链接中概述的 OAuth 2.0/JWT 工作流程向 Google 进行身份验证

在使用 Google OAuth 2.0 成功进行用户身份验证的情况下,Google API 会向应用程序 OAuth 发送如下响应:

{
  "clientId": "xxx...apps.googleusercontent.com",
  "credential": "yyy...123...zzz",
  "select_by": "user"
}
Run Code Online (Sandbox Code Playgroud)

我有一个 client_id 并使用 NodeJS + JS。

用户通过身份验证后,如何向应用程序提供真实的用户数据?

javascript oauth node.js oauth-2.0 google-oauth

8
推荐指数
2
解决办法
1万
查看次数

如何在 POSTMAN 中解码 jwt 令牌?

我想解码使用 Postman 收到的 jwt 令牌并在 REST API 中实现它。我怎样才能做到这一点?我看到人们发布了解码 jwt 令牌的代码(参考:如何在不使用库的情况下在 javascript 中解码 jwt 令牌?),但我不明白如何在邮递员中执行此操作?解码 jwt 需要什么 url?需要什么标头、授权?

jwt postman

7
推荐指数
2
解决办法
1万
查看次数

如何从jwt令牌获取用户角色

在服务器端,我有这些代码登录:

return jsonify({'email': email, 'token': create_token(email, isAdmin, password)})
Run Code Online (Sandbox Code Playgroud)

在客户端,我需要代码来检查登录和isAdmin.

isLogged() {
if (localStorage.getItem('currentUser') &&
    JSON.parse(localStorage.getItem('currentUser')).email) {
  return true;
}
return false;
}

isAdmin(){
  //???
}
Run Code Online (Sandbox Code Playgroud)

如何从令牌获取用户角色?

token jwt angular

6
推荐指数
1
解决办法
1万
查看次数

检查 JWT 令牌的有效性 - beforeEnter

我有一个在 Vue 路由器中运行“beforeEnter”的函数来验证用户是否已通过身份验证,否则会触发一条消息。

它检查 (jwt) 是否token保存在localStorage- 如果用户手动注销,这会起作用,因为它会从localStorage. 但是,当令牌过期时,它仍然保留在中,localStorage因此该函数认为 ( (localStorage.token)) 用户已登录。

由于令牌无效,服务器仍然会阻止发出的任何请求 - 因此是安全的。

在页面加载之前,如何在“beforeEnter”中间件中检查服务器端令牌的有效性?

我是否需要创建一个端点来检查令牌有效性并返回结果?(我正在使用 fetch(),但是我见过人们使用 axios 拦截器......)

我没有使用VUEX,这没什么价值,而且似乎有更多细节?

function protectedPage(to, from, next) {
  if (localStorage.token) {
    next();
  } else {
    Vue.toasted.show("The session has ended. Please login.", {
      theme: "toasted-primary",
      position: "top-center",
      duration: null,
      action: {
        text: "Login",
        onClick: (e, toastObject) => {
          next("/");
          toastObject.goAway(0);
        }
      }
    });
    next("/");
  }
}
Run Code Online (Sandbox Code Playgroud)

vue.js vue-router vuejs2

5
推荐指数
1
解决办法
7639
查看次数

在Firebase对象内的哪里找到auth.token数据

我正在使用signInWithCustomToken,经过身份验证后,找不到在服务器端设置的自定义声明数据存储在哪里(createCustomToken)。

我可以通过auth.token在firebase规则中看到它们,但是如何在我的javascript代码中通过firebase对象访问它们。

firebase firebase-security firebase-authentication

3
推荐指数
1
解决办法
623
查看次数

在客户端解码 JWT 的库

我正在开发一个将 JWT 令牌存储在 cookie 中的网站。我想要做的是,创建 Javascript 来解码令牌并提取我需要的值并将其传递给我的同事编写的另一个 Javascript。我的问题是,是否有用于 JWT 令牌解码的客户端 javascript 库可以从我的脚本中导入?

javascript jwt

2
推荐指数
1
解决办法
5065
查看次数

在浏览器上验证 JWT

我一直在阅读有关JWT的内容,我知道它由三个部分组成,即headerpayloadsignature

我将哈希算法保留在标头中,将基本信息保留在有效负载中,例如。有效负载中的名称、年龄、角色、到期日等,然后将这两者都进行 Base64 编码,然后使用标头中指定的算法进行哈希处理以获得 JWT

  1. 我有一个可以使用username和登录的前端password
  2. 登录请求发送到服务器,服务器对其进行身份验证并返回 JWT。假设使用的算法是 HS256,它是一种对称密钥算法。
  3. 因此服务器将使用secret key生成 JWT 的方法。
  4. 作为登录请求响应的一部分,浏览器将具有 JWT。
  5. 现在这个 JWT 可能会在途中被篡改,所以在使用它之前,我应该验证 JWT 的真实性。
  6. 为了验证,我需要密钥。

问题:

  1. secret key我如何在前端得到这个?
  2. 有效负载可以保留有关用户的任何信息(不是任何敏感信息,例如密码)。既然 JWT 可能在途中被篡改,那么在前端不验证 JWT 的情况下使用有效负载信息不是很危险吗?

authentication jwt

2
推荐指数
1
解决办法
6344
查看次数

JWT RS256 是否需要 OpenSSL?无法在 PHP 中解码 JWT

我们的证书是 Comodo Positive SSL。
我们正在尝试使用 Php 和https://github.com/firebase/php-jwt这个库解码从“使用 Apple Id API 签名”给出的 JWT 。当我们运行 decode 它会给我们

A PHP Error was encountered
Severity: Warning

Message: openssl_verify(): supplied key param cannot be coerced into a public key

Filename: php-jwt/JWT.php

Line Number: 231

Array ( [status] => [message] => OpenSSL error: error:0906D06C:PEM routines:PEM_read_bio:no start line )
Run Code Online (Sandbox Code Playgroud)

我们不知道该怎么办.. 如果我们将 RS256 更改为 HS256,它会给我们

Array ( [status] => [message] => Algorithm not allowed )
Run Code Online (Sandbox Code Playgroud)

php ssl openssl jwt

2
推荐指数
1
解决办法
2046
查看次数

JWT解码可在React Native中使用,但不适用于React

因此,当您在https://jwt.io/中解码以下内容时, 它说它具有一个名为“ token”的标头,在重新解码它时它具有令牌,您可以访问有效负载。

通常在RN中,我可以使用this.props.user.token访问包含令牌的有效负载,但是在React中,“ token”属性不存在,因为它不是JavaScript对象,而是字符串,但是我在后端使用相同的API。

eyJ0b2tlbiI6ImV5SmhiR2NpT2lKSVV6STFOaUlzSW5SNWNDSTZJa3BYVkNKOS5leUpwWkhCaGMzTWlPaUl6WkRFME1ERmlNQzFtTkdWakxURXhaVGN0WVdReE15MHpaRGRsTUdZME9EUmlaR0k2TVRsaU4yTmpNREUyWVRVeU1ERTRNemt3TmpsbU56aGxNV0pqTXpBMk4yUTBZalJqTVRrNE1HTTBPV05tWkRsak9XWTRNV1F4Tm1VMllUbGhaR1JrTVNJc0ltbGhkQ0k2TVRVeE5UY3lNalF6TkgwLlg0dGUxRmhzbGJlcW5Id3RCQ2NOMHF5Zk9vb2tvdVN2TXRlLVBUTUtrMHcifQ==
Run Code Online (Sandbox Code Playgroud)

我尝试使用解码

var decoded = jwt.decode(response.data);
Run Code Online (Sandbox Code Playgroud)

但是解码为null,该怎么办?

javascript node.js jwt reactjs

1
推荐指数
1
解决办法
5855
查看次数

在节点中解码 Jwt 令牌 - 无需库

我有以下代码来解码 Javascript 中的 Jwt 令牌(参考:如何解码 javascript 中的 jwt 令牌

const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';

function parseJwt(token) {
  var base64Url = token.split('.')[1];
  var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
  console.log(JSON.parse((atob(base64))))
};

parseJwt(token);
Run Code Online (Sandbox Code Playgroud)

我从上面的代码中获取了我需要的有效负载,但是我在节点中实现它,我们没有“atob”函数来解码base64编码的字符串

看来我们需要在节点中使用Buffer。我进行了研究并提出了以下不起作用的解决方案。

const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
function parseJwt(token) {
  const base64Url = token.split('.')[1];
  const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
  const buff = new Buffer(base64, 'base64');
  const payloadinit = buff.toString('ascii');
  const payload = JSON.parse(payloadinit);
  console.log(payload)
};
parseJwt(token);
Run Code Online (Sandbox Code Playgroud)

如果有更好的方法,请告诉我 - 无库(Jwt 或解码 Jwt)

javascript node.js express jwt

1
推荐指数
1
解决办法
1万
查看次数