Del*_*lta 5 java security android jwt
我有一个从服务器获取的签名 JWT 字符串。我不知道密钥,或者我不想将密钥放在客户端/设备上。
使用我的令牌使用此站点时:https://jwt.io/我得到了所需的结果,它告诉我标头和有效负载信息。
我无法在 android 上找到一个可以完成本网站功能的库,我已经尝试了所有我能找到的库。最认可使用的是:https : //github.com/jwtk/jjwt
但这给了我一个例外,即我无法解析上面其他网站所证明的签名令牌是错误的。我使用的另一个资源是:https : //bitbucket.org/b_c/jose4j/wiki/Home
这至少给了我标题信息,这是我能够得到的最远的信息。
为了说明为什么它是这样的,有效负载包含一个过期时间,当令牌即将过期时,我应该提示用户重新输入他们的凭据以获取新令牌。现在这可能看起来像是一个安全威胁,因为黑客可以操纵设备上的令牌,但服务器会检查令牌以确保它是真实的,这就是为什么我不想要设备上的密钥,因为这可以通过黑客,并使整个应用程序易受攻击。
如果您想在不使用签名的情况下解析签名文本:
1-添加以下依赖项:
//JWT
compile 'io.jsonwebtoken:jjwt:0.7.0'
Run Code Online (Sandbox Code Playgroud)
2 - 添加以下进口:
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Header;
import io.jsonwebtoken.Jwt;
import io.jsonwebtoken.Jwts;
Run Code Online (Sandbox Code Playgroud)
3-使用以下代码块:
//ref : https://github.com/jwtk/jjwt/issues/135
//you can put your signatured text instead of jws variable.
String jws = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ";
int i = jws.lastIndexOf('.')
String withoutSignature = jws.substring(0, i+1);
Jwt<Header,Claims> untrusted = Jwts.parser().parseClaimsJwt(withoutSignature);
/*untrusted.getBody().getSubject();
untrusted.getBody().getExpiration();
etc.
*/
Run Code Online (Sandbox Code Playgroud)
答案很简单,尽管我认为应该在框架中。但是一个简单的未签名 JWT 中仍然包含 2 个必需的句点,但最后一个之后没有任何内容,因此我将 JWT 拆分为句点,并将第一个和第二个句点与句点合并,并在末尾放置一个句点。
String[] splitToken = result.Value.Content.AuthorizationJWTToken.split("\\.");
Jwt parsedToken = Jwts.parser().parse(splitToken[0] + "." + splitToken[1] + ".");
Run Code Online (Sandbox Code Playgroud)
这是使用https://github.com/jwtk/jjwt库。
| 归档时间: |
|
| 查看次数: |
6478 次 |
| 最近记录: |