![](/img/trans.png)
[英]AWS Cognito use custom attribute to map Spring application ROLE instead of cognito:groups
[英]Integrating Spring Security with AWS Cognito
我正在為在 Spring Boot 項目中使用 AWS Cognito 的系統構建后端。 對於我的一些 API 請求,我希望使用客戶端通過 AWS Cognito 用戶的 JWT 傳遞的不記名令牌對它們進行身份驗證。
我有以下 class 來驗證和解析它:
public class Auth {
record CanonicalAuthToken(String token, UUID uuid, String username) {}
public static Optional<CanonicalAuthToken> validateAndExtractToken(String token, String jwksUrl, String jwtTokenIssuer) {
var decodedJwtToken = JWT.decode(token);
var kid = decodedJwtToken.getKeyId();
try {
var http = new UrlJwkProvider(new URL(jwksUrl));
// Let's cache the result from Cognito for the default of 10 hours
var provider = new GuavaCachedJwkProvider(http);
var jwk = provider.get(kid);
var algorithm = com.auth0.jwt.algorithms.Algorithm.RSA256((RSAPublicKey) jwk.getPublicKey(), null);
var verifier = JWT.require(algorithm)
.withIssuer(jwtTokenIssuer)
.build();
var decoded = verifier.verify(token);
return Optional.of(new CanonicalAuthToken(decoded.getToken(), UUID.fromString(decoded.getSubject()), decoded.getClaim("username").asString()));
} catch (Exception e) {
e.printStackTrace();
}
return Optional.empty();
}
private Auth() {}
}
但是,這僅在每個端點實現的主體中手動調用它時才有效。 相反,我想利用 Spring 的內置安全機制充當身份驗證的中間件。
我確實找到了幾個解決方案,所有這些解決方案都包含大約六個類。 但是,這些都不允許我在端點實現本身中實際訪問解碼后的 JWT(具體來說,我想訪問sub
字段,以便我可以訪問用戶的 UUID 並在數據庫中匹配它)。
到目前為止,我能夠找到的所有資源都有些相關和有用,但是我仍然找不到實現這一特定目標的方法,而且我什至不確定要谷歌什么。
任何幫助表示贊賞,謝謝!
您應該配置 Filter 並從 FE 發送 header 中的令牌。 一旦你在過濾器中有了令牌,你就可以解析和驗證
@Override
public void doFilter(
ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
String token = request.getHeader("Authorization");
// validate and parse token
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
LOG.info(
"Logging Request {} : {}", req.getMethod(),
req.getRequestURI());
chain.doFilter(request, response);
LOG.info(
"Logging Response :{}",
res.getContentType());
}
https://www.baeldung.com/spring-boot-add-filter
https://www.baeldung.com/spring-security-custom-filter
https://spring.io/guides/topicals/spring-security-architecture
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.