亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Firebase Auth 在 Spring 中對 API 請求進行身份驗證

使用 Firebase Auth 在 Spring 中對 API 請求進行身份驗證

慕萊塢森 2023-06-28 15:32:34
我已經使用 Firebase 身份驗證令牌 (JWT) 驗證對 API 的訪問權限,該令牌作為承載令牌在 Http 授權標頭內傳遞。使用自動配置可以很好地工作。現在我想從身份驗證映射到數據庫中的用戶記錄。我需要如何調整安全過濾器鏈?此配置由 spring boot 根據文檔自動應用,并且可以被覆蓋:@Overrideprotected void configure(HttpSecurity http) throws Exception {    http            .authorizeRequests().anyRequest().authenticated()            .and().oauth2ResourceServer().jwt();}我正在使用 Firebase 身份驗證 UI 插入解決方案,該解決方案在成功身份驗證時提供訪問令牌。然后這個令牌被傳遞到我的 API。
查看完整描述

1 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

您可能需要做一些事情:

  1. 編寫一個安全過濾器來調用 FirebaseAuth 對 Bearer Token 進行身份驗證。令牌經過身份驗證后,將其放入 SecurityContext 中。類似于:

public class FirebaseFilter extends OncePerRequestFilter {


    private static String AUTH_HEADER = "Authorization";


    @Override

    protected void doFilterInternal(HttpServletRequest request,

                                    HttpServletResponse response,

                                    FilterChain filterChain) throws ServletException, IOException {


        String authToken = request.getHeader(AUTH_HEADER).substring(7);

        if (!StringUtils.isEmpty(authToken)) {

            Authentication auth = getAuthentication(authToken);

            SecurityContextHolder.getContext().setAuthentication(auth);

            logger.debug("Successfully Authenticated");

        }

        filterChain.doFilter(request, response);


    }


    private FirebaseToken verifyIdToken(String idToken) {

        if (StringUtils.isEmpty(idToken)) {

            throw new IllegalArgumentException("idToken is blank");

        }

        return FirebaseAuth.getInstance().verifyIdToken(idToken);

    }


    private Authentication getAuthentication(String idToken) {


        FirebaseToken token = verifyIdToken(idToken);

        assert token != null;

        return new FirebaseAuthenticationToken(token.getUid(), token);

    }

}

您將需要 UserDetailsService 的實現,我相信您已經有了。


您將需要一個安全提供程序,它從安全上下文中獲取身份驗證,然后調用 UserDetailsService 來獲取應用程序可能需要的任何信息。然后更新認證對象。類似于:


@Component

public class FirebaseAuthenticationProvider implements AuthenticationProvider {


    private UserService userService;


    @Autowired

    public FirebaseAuthenticationProvider(UserService userService) {

        this.userService = userService;

    }


    public Authentication authenticate(Authentication authentication) throws AuthenticationException {

        if (!supports(authentication.getClass())) {

            return null;

        }


        UserDetails details = userService.loadUserByUsername(authentication.getPrincipal()

                                                                           .toString());

        FirebaseToken token = (FirebaseToken) authentication.getCredentials();

        if (details == null) {


            details = userService.registerUser(token);

        }


        return new FirebaseAuthenticationToken(details, token, details.getAuthorities());

    }


    public boolean supports(Class<?> authentication) {

        return (FirebaseAuthenticationToken.class.isAssignableFrom(authentication));

    }


}


查看完整回答
反對 回復 2023-06-28
  • 1 回答
  • 0 關注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號