我有点难过这个.我正在尝试建立一个有效的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.)
如果我们尝试解析过期 JWT,则会导致过期异常.
即使JWT已过期,有没有办法阅读索赔.
下面用于解析java中的JWT:
Jwts.parser().setSigningKey(secret.getBytes()).parseClaimsJws(token).getBody();
我正在我的应用程序中使用JWT实现OAuth 2.0,并且无法确定将我的aud声明设置为什么.用户将通过我的身份验证服务器"登录"我的客户端以访问我的API(资源)服务器.我希望我的令牌仅对特定客户端和特定API有效.
从我的客户端登录时,我将其包含client_id在请求中,但在我发现的大多数 实现中 ,将其设置为.我倾向于包括客户在我的登录请求字段,然后设置在令牌的数组和,但感觉像它只是意味着该令牌都有效的,这让我觉得我应该只需添加一个自定义声明,专门声明此令牌是为特定客户端创建的. audclient_idaudience_idaudclient_idaudience_idaudiencesclient
我没有遇到任何在线实现,包括OAuth登录请求中的a client_id和audience_id(s),也没有client 在规范中看到保留的声明.
我在这里错过了什么吗?
什么是专门陈述不同client_id和audience_idJWT的最佳做法?
我正在通过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
我看到有两个选项:
username, roleJWT 这样不可更改的字段.创建JWT并返回到前端后,我从API发送另一个用户数据请求.我也可能在这里遗漏一些东西.所以想知道用JWT处理用户数据的最佳方法是什么.
我正在使用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.3jsonwebtoken@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) 我设置了我的项目json web token身份验证.我在"私人"路径下获得了所有请求.使用标记img和属性src从客户端下载图像的最佳方法是什么?
<img src="/private/test.jpg" />
Run Code Online (Sandbox Code Playgroud)
到目前为止,我唯一的解决方案是使用令牌值在客户端上设置coookie而不是私有来访问公共路径.在服务器上,我将获取cookie值,并在标题中设置适当的令牌向我的私有路径发出新请求.
有更优雅的方式吗?
因此,我尝试使用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) 我正在使用Django Rest Framework,我已经包含了一个名为REST framework JWT Auth的第三方软件包.当您将用户名/密码发送到某个路由时,它会返回一个令牌.然后需要令牌才能获得某些路由的许可.但是,如何从令牌获取用户名?我查看了整个软件包文档并浏览了StackOverflow.它是一个JSON Web令牌,我假设有一个方法,username = decode_token(token)但我还没有找到这样的方法.
我正在尝试将装甲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) 我仍然掌握使用curl 来测试来自终端的API 请求的技巧。我在格式化方面遇到了特殊问题,因为我尝试的 API 请求需要在每次调用时传递 JWT 令牌。\n我尝试传递的请求是 PUT 请求,我的问题是在哪里放置 JWT 令牌授权的标头。\n我尝试了以下格式,但收到错误“无法解析主机:\xe2\x80\x94H”curl:(6) 无法解析主机:“授权:”
\n\ncurl -X PUT -H "Authorization: JWT <token here>" -d "field=value" "https://url/update_record/<id>/"\nRun Code Online (Sandbox Code Playgroud)\n\n有任何想法吗?
\n\n正在访问的呼叫具有以下权限
\n\nclass 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)\nRun Code Online (Sandbox Code Playgroud)\n\n序列化器:
\n\nclass ItemSerializer(ModelSerializer):\n\n class Meta:\n model = Item\n fields = [\n \'id\',\n \'booleanField\',\n ]\nRun Code Online (Sandbox Code Playgroud)\n curl jwt django-rest-framework curl-commandline json-web-token
json-web-token ×10
jwt ×7
java ×2
json ×2
angular ×1
api ×1
bouncycastle ×1
curl ×1
django ×1
gnupg ×1
html5 ×1
javascript ×1
node.js ×1
oauth ×1
oauth-2.0 ×1
rest ×1
typescript ×1