第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

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

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

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

1 回答

?
慕桂英4014372

TA貢獻1871條經(jīng)驗 獲得超13個贊

您可能需要做一些事情:

  1. 編寫一個安全過濾器來調(diào)用 FirebaseAuth 對 Bearer Token 進行身份驗證。令牌經(jīng)過身份驗證后,將其放入 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 的實現(xiàn),我相信您已經(jīng)有了。


您將需要一個安全提供程序,它從安全上下文中獲取身份驗證,然后調(diào)用 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 關注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號