我有一个jwt令牌,我在用户登录后从cognito中检索过。
我的应用程序中有一个特定的api端点,我希望只有拥有有效jwt的用户才能访问此端点。我试着查看网上的各种资源,但我什么都听不懂。我是jwt概念的新手。
PS我有一个Java应用程序(spring boot)。如果有人能详细描述我需要遵循以验证我的jwt的步骤,我真的很感激。如果可能,请提供代码。
@CrossOrigin
@RequestMapping(value= "/login", method=RequestMethod.POST,consumes="application/json")
@ResponseBody
public String authenticate(@RequestBody SignInDTO signInDetails)
{
//boolean isAuthenticated=false;
CognitoHelper cognitoHelper=new CognitoHelper();
String authResult=cognitoHelper.ValidateUser(signInDetails.getEmailId(), signInDetails.getPassword());
.....
.....
.....
authResult是我从cognito获得的jwt。在此之后,我完全不知道需要做什么。
答案 0 :(得分:1)
Spring Security 5.1引入了对此的支持,因此更容易实现。参见https://docs.spring.io/spring-security/site/docs/current/reference/html/jc.html#oauth2resourceserver
基本上:
https://cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>
答案 1 :(得分:0)
使用像java-jwt
这样的库(我想你正在使用Maven)
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.3.0</version>
</dependency>
然后:
String token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXUyJ9.eyJpc3MiOiJhdXRoMCJ9.AbIJTDMFc7yUa5MhvcP03nJPyCPzZtQcGEp-zWfOkEE";
try {
Algorithm algorithm = Algorithm.HMAC256("secret");
// or
Algorithm algorithm = Algorithm.RSA256(publicKey, privateKey);
JWTVerifier verifier = JWT.require(algorithm)
.withIssuer("auth0")
.build(); //Reusable verifier instance
DecodedJWT jwt = verifier.verify(token);
} catch (UnsupportedEncodingException exception){
//UTF-8 encoding not supported
} catch (JWTVerificationException exception){
//Invalid signature/claims
}
您可以在此处手动解码jwt-token
:https://jwt.io
有关java-jwt
的更多信息:https://github.com/auth0/java-jwt
答案 2 :(得分:0)
第1步:确认JWT的结构
第2步:验证JWT签名
第3步:验证声明
答案 3 :(得分:0)
对于最低限度的要求,您需要spring-boot-starter-oauth2-resource-server和spring-boot-starter-security依赖项。您可能还需要spring-security-oauth2-jose
依赖项。
然后,您需要在属性或yml文件中设置发行者Uri。您可以在访问令牌有效负载中找到该值,作为“ iss”值。 spring.security.oauth2.resourceserver.jwt.issuer-uri:
使用卷发进行测试
curl -o /dev/null -s -w "%{http_code}\n" -H "Authorization: Bearer ey..." http://localhost:8080/hello
答案 4 :(得分:-1)
Here's如何验证令牌(它是用Kotlin编写的)。
密钥所在的位置:
https://cognito-idp。$ regionName.amazonaws.com/$cognitoUserPoolId/.well-known/jwks.json
我在这里实现了一堆: https://github.com/awslabs/cognito-proxy-rest-service