标签: json-web-token

无法正确设置JWT的Exp和Iat

我有点难过这个.我正在尝试建立一个有效的JWT.我正在使用node.js和jsonwebtoken中间件.我已经按照repo(位于此处)上的文档进行操作,但我一直得到错误的Exp和Iat.显然我想要做到这一点,以便我不允许已经过期的JWT.

作为测试,我有以下代码:

var token = jwt.sign({"id": user._id}, configGeneral.JWT, { expiresIn: '1h' });

var decoded = jwt.decode(token, configGeneral.JWT);

var d1 = new Date(decoded.exp);
var d2 = new Date(decoded.iat);

console.log(decoded);
console.log(d1);
console.log(d2);
Run Code Online (Sandbox Code Playgroud)

这个输出是:

{ id: '56253091fe0397c80133f3e4',
  iat: 1445714161,
  exp: 1445717761 }
Sat Jan 17 1970 19:35:17 GMT+0200 (South Africa Standard Time)
Sat Jan 17 1970 19:35:14 GMT+0200 (South Africa Standard Time)
Run Code Online (Sandbox Code Playgroud)

如何让时间戳不反映javascript时代,而是从现在起1小时后的时间?(对于iat和exp.)

javascript node.js jwt json-web-token

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

有没有办法从过期的JWT令牌中解析声明?

如果我们尝试解析过期 JWT,则会导致过期异常.

即使JWT已过期,有没有办法阅读索赔.

下面用于解析java中的JWT:

Jwts.parser().setSigningKey(secret.getBytes()).parseClaimsJws(token).getBody();

java jwt json-web-token

10
推荐指数
3
解决办法
8171
查看次数

JSON Web令牌中的客户端ID或多个受众

我正在我的应用程序中使用JWT实现OAuth 2.0,并且无法确定将我的aud声明设置为什么.用户将通过我的身份验证服务器"登录"我的客户端以访问我的API(资源)服务器.我希望我的令牌仅对特定客户端和特定API有效.

认证流程

从我的客户端登录时,我将其包含client_id在请求中,但在发现的大多数 实现中 ,将其设置为.我倾向于包括客户在我的登录请求字段,然后设置在令牌的数组和,但感觉像它只是意味着该令牌都有效的,这让我觉得我应该只需添加一个自定义声明,专门声明此令牌是为特定客户端创建的. audclient_idaudience_idaudclient_idaudience_idaudiencesclient

我没有遇到任何在线实现,包括OAuth登录请求中的a client_idaudience_id(s),也没有client 在规范中看到保留的声明.

我在这里错过了什么吗?

什么是专门陈述不同client_idaudience_idJWT的最佳做法?

oauth oauth-2.0 jwt json-web-token

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

使用JWT处理用户数据的最佳实践

我正在通过Json Web Tokens(JWT)实现无状态REST API.目前,我想知道将用户数据传递到前端的最佳方法是什么.这些是我需要在前端访问的字段username, email, role, full_name, description, profile_img, facebook_id, twitter_id, custom_setting_1, custom_setting_2, custom_setting_3, custom_setting_4

我看到有两个选项:

  1. 在JWT创建期间,将用户数据添加到JWT有效负载.然后在前端解码它.虽然我担心如果我添加有效载荷会变得非常大的所有数据.
  2. 我只能添加像username, roleJWT 这样不可更改的字段.创建JWT并返回到前端后,我从API发送另一个用户数据请求.

我也可能在这里遗漏一些东西.所以想知道用JWT处理用户数据的最佳方法是什么.

api rest jwt json-web-token

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

如何使用打字稿通过`jsonwebtoken`获取令牌过期

我正在使用jsonwebtoken解码令牌,我正在尝试获取到期日期。Typescript 抛出有关该exp属性的错误,我不太确定如何解决它们:

import jwt from 'jsonwebtoken'

const tokenBase64 = 'ey...' /* some valid token */

const token = jwt.decode(tokenBase64)
const tokenExpirationDate = token.exp
//                                ^^^
// Property 'exp' does not exist on type 'string | object'. Property 'exp' does not exist on type 'string'.
Run Code Online (Sandbox Code Playgroud)

我已经安装@types/jsonwebtoken,并寻找要转换的令牌类型token,但没有找到。建议?

使用

  • @types/jsonwebtoken@7.2.3
  • jsonwebtoken@8.1.0

.tsconfig:

{
  "compilerOptions": {
    "allowJs": true,
    "baseUrl": ".",
    "jsx": "Preserve",
    "moduleResolution": "Node",
    "module": "ESNext",
    "sourceMap": true,
    "removeComments": true,
    "allowSyntheticDefaultImports": true,
    "target": "ESNext"
  }
}
Run Code Online (Sandbox Code Playgroud)

jwt typescript json-web-token

9
推荐指数
4
解决办法
2万
查看次数

json web token + img src

我设置了我的项目json web token身份验证.我在"私人"路径下获得了所有请求.使用标记img和属性src从客户端下载图像的最佳方法是什么?

<img src="/private/test.jpg" />
Run Code Online (Sandbox Code Playgroud)

到目前为止,我唯一的解决方案是使用令牌值在客户端上设置coookie而不是私有来访问公共路径.在服务器上,我将获取cookie值,并在标题中设置适当的令牌向我的私有路径发出新请求.

有更优雅的方式吗?

html5 json json-web-token

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

如何将json Web令牌添加到每个标头?

因此,我尝试使用JSON Web令牌进行身份验证,并且正在努力弄清楚如何将它们附加到标头并根据请求发送它们.

我试图使用https://github.com/auth0/angular2-jwt,但我无法使用Angular并放弃,并认为我可以弄清楚如何在每个请求中发送JWT或发送它在标题中(最好是标题).它比我想象的要困难一点.

这是我的登录

submitLogin(username, password){
        console.log(username);
        console.log(password);
        let body = {username, password};
        this._loginService.authenticate(body).subscribe(
            response => {
                console.log(response);
                localStorage.setItem('jwt', response);
                this.router.navigate(['UserList']);
            }
        );

    }
Run Code Online (Sandbox Code Playgroud)

和我的login.service

authenticate(form_body){
        return this.http.post('/login', JSON.stringify(form_body), {headers: headers})
                .map((response => response.json()));
    }
Run Code Online (Sandbox Code Playgroud)

我知道这些并不是真的需要,但也许它会有所帮助!一旦这个令牌被创建并存储它,我想做两件事,在标题中发送它并提取我用它放入的过期日期.

一些Node.js登录代码

var jwt = require('jsonwebtoken');
function createToken(user) {
  return jwt.sign(user, "SUPER-SECRET", { expiresIn: 60*5 });
}
Run Code Online (Sandbox Code Playgroud)

现在我只是尝试通过角度服务将其传递回使用此服务的节点.

getUsers(jwt){
        headers.append('Authorization', jwt);
        return this.http.get('/api/users/', {headers: headers})
            .map((response => response.json().data));
    }
Run Code Online (Sandbox Code Playgroud)

JWT是我在本地存储中的webtoken,我通过我的组件传递给服务.

我没有任何错误,但当它到达我的节点服务器时,我从来没有在标头中收到它.

'content-type': 'application/json',
 accept: '*/*',
 referer: 'http://localhost:3000/',
 'accept-encoding': 'gzip, deflate, sdch',
 'accept-language': 'en-US,en;q=0.8', …
Run Code Online (Sandbox Code Playgroud)

json jwt json-web-token angular2-services angular

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

如何从Django Rest Framework JWT令牌获取用户名

我正在使用Django Rest Framework,我已经包含了一个名为REST framework JWT Auth的第三方软件包.当您将用户名/密码发送到某个路由时,它会返回一个令牌.然后需要令牌才能获得某些路由的许可.但是,如何从令牌获取用户名?我查看了整个软件包文档并浏览了StackOverflow.它是一个JSON Web令牌,我假设有一个方法,username = decode_token(token)但我还没有找到这样的方法.

django django-rest-framework json-web-token

8
推荐指数
3
解决办法
6835
查看次数

在Java中解析装甲ECC公钥/私钥(由gpg cli生成)

我正在尝试将装甲ECC gpg密钥转换为相应的java类ECPrivateKey/ECPublicKey.

要生成我正在使用的密钥对: gpg --expert --full-generate-key

然后选择(9)ECC和ECC(或(10)ECC(仅签名))

然后选择(3)NIST P-256

导致:

-----BEGIN PGP PUBLIC KEY BLOCK-----

mFIEWUdzwhMIKoZIzj0DAQcCAwQkAvZC1PIJ8ke1myyKhNny9vN78TIYo2MuAOY+
F38L9S3+Za9cKV/iIHOqfapbMoqdSmSnqDkevwQSr5MF2UOXtCJzaWduZWNjIChF
Q0Mgc2lnbiBvbmx5KSA8c3NAc3MuY28+iJAEExMIADgWIQRiC+kefVkjnjKovKy5
XANFl5+n1gUCWUdzwgIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRC5XANF
l5+n1mzGAQDsgutymxDTTXPKFfpFFVp4fxacx1MSqxP71gNJYjguXwD8CEXD20Vm
aU1WMi2jU7JC6oJn94Y4vWHwTLOU1zmQ19o=
=swfS
-----END PGP PUBLIC KEY BLOCK-----

-----BEGIN PGP PRIVATE KEY BLOCK-----

lHcEWUdzwhMIKoZIzj0DAQcCAwQkAvZC1PIJ8ke1myyKhNny9vN78TIYo2MuAOY+
F38L9S3+Za9cKV/iIHOqfapbMoqdSmSnqDkevwQSr5MF2UOXAAD9FhS2HZoWOyIi
l9nj+WPa9S1o50jM5bNIRALzcyS8SgoP97Qic2lnbmVjYyAoRUNDIHNpZ24gb25s
eSkgPHNzQHNzLmNvPoiQBBMTCAA4FiEEYgvpHn1ZI54yqLysuVwDRZefp9YFAllH
c8ICGwMFCwkIBwIGFQgJCgsCBBYCAwECHgECF4AACgkQuVwDRZefp9ZsxgEA7ILr
cpsQ001zyhX6RRVaeH8WnMdTEqsT+9YDSWI4Ll8A/AhFw9tFZmlNVjIto1OyQuqC
Z/eGOL1h8EyzlNc5kNfa
=qHBB
-----END PGP PRIVATE KEY BLOCK-----
Run Code Online (Sandbox Code Playgroud)

如何从这种装甲文本格式获得有效的java.security.interfaces.ECPrivateKey和java.security.interfaces.ECPublicKey java类?

我的最终目标是以下列方式登录:

String createSignatureFromJson(String jsonPayload, byte[] privateKey) {
        Payload payload = new Payload(jsonPayload)
        def key = privateKeyParse(privateKey)

        JWSSigner signer = new ECDSASigner((ECPrivateKey)key)
        JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.ES256).build()

        JWSObject jwsObject = new JWSObject(header, payload)
        jwsObject.sign(signer) …
Run Code Online (Sandbox Code Playgroud)

java bouncycastle gnupg elliptic-curve json-web-token

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

带有 JWT 授权标头的 Curl PUT 请求

我仍然掌握使用curl 来测试来自终端的API 请求的技巧。我在格式化方面遇到了特殊问题,因为我尝试的 API 请求需要在每次调用时传递 JWT 令牌。\n我尝试传递的请求是 PUT 请求,我的问题是在哪里放置 JWT 令牌授权的标头。\n我尝试了以下格式,但收到错误“无法解析主机:\xe2\x80\x94H”curl:(6) 无法解析主机:“授权:”

\n\n
curl -X PUT -H "Authorization: JWT <token here>" -d "field=value" "https://url/update_record/<id>/"\n
Run Code Online (Sandbox Code Playgroud)\n\n

有任何想法吗?

\n\n

正在访问的呼叫具有以下权限

\n\n
class Item_Update_APIView(UpdateAPIView):\n    authentication_classes = [SessionAuthentication, BasicAuthentication, JSONWebTokenAuthentication]\n    permission_classes = [IsAuthenticated]\n    serializer_class = ItemSerializer\n\n    def get_queryset(self):\n        id = self.kwargs[\'id\']\n        return Item.objects.filter(id__exact=id)\n
Run Code Online (Sandbox Code Playgroud)\n\n

序列化器:

\n\n
class ItemSerializer(ModelSerializer):\n\n    class Meta:\n        model = Item\n            fields = [\n            \'id\',\n            \'booleanField\',\n        ]\n
Run Code Online (Sandbox Code Playgroud)\n

curl jwt django-rest-framework curl-commandline json-web-token

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