Tag: jwt

Android JWT在签名时解析有效负载/声明

我有一个签名的JWT字符串,我从服务器获得。 我不知道密钥,或者我不想把密钥放在客户端/设备上。 将此站点与我的令牌一起使用时: https : //jwt.io/我得到了所需的结果,它告诉我Header和有效负载信息。 我无法在Android上找到一个能够完成本网站function的库,我已经尝试了所有我能找到的库。 最受认可的是: https : //github.com/jwtk/jjwt 但这给了我一个例外,我不能解析一个签名的令牌,上面的其他网站certificate这是假的。 我使用的另一个资源是: https : //bitbucket.org/b_c/jose4j/wiki/Home 这个至少给了我头条信息,这是我能够得到的最远的信息。 为了给出上下文的原因,有效负载包含到期时间,并且当令牌即将到期时,设备上应该提示用户重新输入其凭据以获取新令牌。 现在这可能看起来像是一种安全威胁,因为黑客可以操纵设备上的令牌,但是服务器检查令牌以确保它是真实的,这就是为什么我不想要设备上的密钥,因为这可以通过黑客,并使整个应用程序易受攻击。

Angularjs Post没有向Spring JWT发送头文件

我有一个由AngularJs构建的Web应用程序和一个由Spring构建的后端应用程序,我正在使用JWT来保护我的应用程序。 使用Get方法一切正常,在后端级别我获得了我期待的持有者令牌,因此我可以返回私人信息。 但是使用POST方法,不会发送承载令牌。 我不知道这是来自后端或前端层的问题。 在这里你有我的代码: AngularJS $http({ method: ‘POST’, url: SessionService.apiUrl + ‘/category/create’, headers: { ‘Accept’: ‘application/json’,’Content-Type’: ‘application/json; charset=UTF-8;’, ‘Authorization’: ‘Bearer ‘ + SessionService.getToken() }, data: params }) 对于GET方法,我有完全相同(没有参数和方法GET),它正在工作。 在后端: @RequestMapping(value = “/category/create”, method = RequestMethod.POST) public @ResponseBody Response add(@RequestBody CategoryBO request) { … } 要获取Authorization标头,我将以下列方式使用io.jsonwebtoken库: protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws […]

静态密钥为byte ,Key还是String?

我已经开始使用JJWT在我的服务器应用程序上处理JWT。 我的JWT秘密将存储在resources文件夹中,我将使用Properties类加载秘密。 JJWT提供了三种签名JWT的方法,一种使用byte[] ,另一种使用String ,另一种使用Key : JwtBuilder signWith(SignatureAlgorithm var1, byte[] var2); JwtBuilder signWith(SignatureAlgorithm var1, String var2); JwtBuilder signWith(SignatureAlgorithm var1, Key var2); 问题:关于安全性,字符集和其他问题,我应该使用哪些建议? 有一段时间,我站在String ,因为Properties返回一个String 。

使用公钥端点validationJWT签名

我想validation微软的一些JWT的签名。 我正在使用Spring-Boot,JJWT库和以下端点: https ://login.microsoftonline.com/common/discovery/v2.0/keys 端点返回JSON公钥数组。 这是数组中的一个例子。 { “kty”: “RSA”, “use”: “sig”, “kid”: “9FXDpbfMFT2SvQuXh846YTwEIBw”, “x5t”: “9FXDpbfMFT2SvQuXh846YTwEIBw”, “n”: “kvt1VmR4nwkNM8jMU0wmj2gSS8NznbOt2pZI6Z7HQT_esF7W19GZR7Y72Xo1i5zXRDM9o3GeTIjBrnr3yy41Q_EaUQ7C-b-Hmg94Vy7EBZyBhi_mznz0dYWs2MIXwR86Nni9TmgTXvjgTPF2YGJoZt4TwcMFefW8rijCVyNrCBA0XspDouNJavvG0BEMXYigoThFjLRXS5U3h4BDfNZFZZS3dyliNOXfgRn2k7oITz8h_ueiPvmDRFh38AeQgx1cELhKWc3P5ugtttraSwgH7nP2NUguO9nCrHuL6TZ-KWpmRWZqwH-jYKFQVt3CDpzwNM6XJL-oHbl1x-gI3YYX5w”, “e”: “AQAB”, “x5c”: [ “MIIDBTCCAe2gAwIBAgIQZSAeaqWig4BHC1ksmNNcgjANBgkqhkiG9w0BAQsFADAtMSswKQYDVQQDEyJhY2NvdW50cy5hY2Nlc3Njb250cm9sLndpbmRvd3MubmV0MB4XDTE3MDUwNjAwMDAwMFoXDTE5MDUwNzAwMDAwMFowLTErMCkGA1UEAxMiYWNjb3VudHMuYWNjZXNzY29udHJvbC53aW5kb3dzLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJL7dVZkeJ8JDTPIzFNMJo9oEkvDc52zrdqWSOmex0E/3rBe1tfRmUe2O9l6NYuc10QzPaNxnkyIwa5698suNUPxGlEOwvm/h5oPeFcuxAWcgYYv5s589HWFrNjCF8EfOjZ4vU5oE1744EzxdmBiaGbeE8HDBXn1vK4owlcjawgQNF7KQ6LjSWr7xtARDF2IoKE4RYy0V0uVN4eAQ3zWRWWUt3cpYjTl34EZ9pO6CE8/If7noj75g0RYd/AHkIMdXBC4SlnNz+boLbba2ksIB+5z9jVILjvZwqx7i+k2filqZkVmasB/o2ChUFbdwg6c8DTOlyS/qB25dcfoCN2GF+cCAwEAAaMhMB8wHQYDVR0OBBYEFGKpXQNrF5IoxS6bL4F92+gxOJlIMA0GCSqGSIb3DQEBCwUAA4IBAQA3HgW5SoHlvvQVxqqi+mtscDZLhNfe13iG/nx8Er5il82b79RVydNs+f9sYxc4T4ctnrZu7x5e7jInJedNdAlrPorBdw+SfvKJsmiNndXugMew1FlcQTQVIFDCbziaJav8rKyMxPfeKkc1aixbajWZkKg6OPmmJn2ceTocbn8PMQy20xNvcWUwgF5FZZIuPqu6feOLJcUIYw+0JFZ265xka30QXpmytcIxajIzpD4PRdCIBuVSqgXacAs4t4+w+OhnosD72yvXck8M4GwX1j+vcuyw0yhDGNMmqsHWP7H3jnJiGDrKhhdVyplzDhTfv2Whbv/dIDn+meLE3yyC5yGL” ], “issuer”: “https://login.microsoftonline.com/{tenantid}/v2.0” } 在JJWT中,我实现了SigningKeyResolver接口,我需要返回一个RSAPublicKey实例来进行validation。 我遇到的问题是从JSON正确创建密钥。 我是从模数和指数开始的吗? BigInteger modulus = new BigInteger(1, Base64.decodeBase64(jsonKey.getN())); BigInteger exponent = new BigInteger(1, Base64.decodeBase64(jsonKey.getE())); publicKey = KeyFactory.getInstance(“RSA”).generatePublic(new RSAPublicKeySpec(modulus, exponent)); 我是从x5c开始,生成X509Certificate对象并从那里拉出PublicKey吗? CertificateFactory factory = CertificateFactory.getInstance(“X.509”); X509Certificate cert = (X509Certificate) […]

JWT如何与Spring MVC一起使用来创建令牌和validation令牌?

我实际上希望对JWT概念以及它如何与Spring MVC工作有更多更清楚的理解。 我找到了链接https://github.com/nielsutrecht/jwt-angular-spring ,其程序运行得非常好。 但我想知道它如何创建令牌,然后用户如何登录应用程序。 我需要澄清/回答它是如何工作的? 请做好。 我的理解:在我看来,当你启动应用程序时,将调用GenericFilterBean实现类,它将生成JWT令牌并将其发送到本地存储中的UI(不确定),然后此令牌将带有请求和标头然后它将得到validation,并将访问给用户? 我想把一些代码片段作为参考(即使你可以从提到的链接中查找代码) AuthenticationTokenProcessingFilter.java public class AuthenticationTokenProcessingFilter extends GenericFilterBean { private final UserDetailsService userService; public AuthenticationTokenProcessingFilter(UserDetailsService userService){ this.userService = userService; } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException{ HttpServletRequest httpRequest = this.getAsHttpRequest(request); String authToken = this.extractAuthTokenFromRequest(httpRequest); String userName = TokenUtils.getUserNameFromToken(authToken); if (userName != null) { […]

JWT中的“秘密”应该是什么?

我将把JWT应用到我使用Java-Jersey开发的REST API中。 我正在为JWT使用这个库 – https://github.com/auth0/java-jwt 关于JWT – Secret,我几乎没有问题 这个Secret必须是独一无二的吗? 我应该使用用户密码的哈希版本来保密吗? (然后它不是唯一的)这是因为当用户更改他的密码时,他的令牌将自动无效。

将jhipster后端和前端分成两个项目?

我正在尝试使用基于令牌的身份validation的jhipster 。 它完美地运作。 现在, 我想在不同的域上运行后端和前端代码 。 我怎样才能做到这一点? 这是我试过的: 运行yo jhipster并选择基于令牌的身份validation选项: Welcome to the JHipster Generator ? (1/13) What is the base name of your application? jhipster ? (2/13) What is your default Java package name? com.mycompany.myapp ? (3/13) Do you want to use Java 8? Yes (use Java 8) ? (4/13) Which *type* of authentication […]

如何让@WebMvcTest与OAuth一起工作?

我只是很难让我的控制器unit testing工作,因为,IMO,如果使用OAuth, Spring doc中的内容是不够的。 就我而言,它是与JWT的Oauth2。 我尝试使用@WithMockUser , @WithUserDetails ,甚至用@WithSecurityContext和自定义UserSecurityContextFactory定义我自己的注释,但是当安全表达式被评估时,总是在UserSecurityContext中获得匿名用户,无论我在工厂设置测试上下文… 我提出了我刚才提出的解决方案,但由于我不确定嘲笑TokenService是最有效/最干净的方式,请随时提供更好的解决方案。

我是否需要具有Spring Security OAuth2的资源服务器?

我正在尝试使用JWT令牌实现OAuth2身份validation。 如果我理解,我需要向授权服务器发送凭据,这将validation我的凭据,并返回签名的JWT令牌。 接下来我尝试实现扩展WebSecurityConfigurerAdapter ,在那里我必须设置哪些端点是安全的,哪些不是。 但我的问题是:我需要资源服务器吗? 它与我潜在的WebSecurityConfig做同样的工作,不是吗? 我的目标是为我的网站创建简单的JWT身份validation。

使用Java生成JJWT签名在jwt.io调试器中失败

我正在使用jjwt Java库在servlet上生成jwt的服务器端,直接从jjwt GitHub页面https://github.com/jwtk/jjwt下面的代码片段生成并打印出这个令牌。 eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJKb2UifQ.XIKER3owR8BS3Krhsksg9INh9VBSejdn_qN-ONtPans String compactJws = Jwts.builder() .setSubject(“Joe”) .signWith(SignatureAlgorithm.HS256, “secret”) .compact(); PrintWriter out = response.getWriter(); out.println(compactJws); 但是,当我尝试在jwt.io的调试器上validation此令牌时,它未通过签名检查。 检查和取消选中秘密base64编码都不起作用 我错误地使用了这个库吗?