Professional Documents
Culture Documents
Tutorial JWT
Tutorial JWT
Um exemplo de uso de JWT e React Native com autenticação OAuth2 pode ser um
aplicativo de compras online. Quando um usuário faz login, o aplicativo obtém um
token de acesso do servidor de autenticação OAuth2. Esse token é então usado para
autenticar o usuário em todas as solicitações subsequentes para o servidor de API.
Uma vez que o usuário é autenticado com sucesso e o token JWT é gerado, você pode
usar a biblioteca AsyncStorage do React Native para armazenar o token no
dispositivo do usuário. Em seguida, você pode usá-lo para autenticar solicitações
para o servidor de API, por exemplo, através do cabeçalho Authorization.
const config = {
issuer: 'https://accounts.google.com',
clientId: 'your-client-id-here',
redirectUrl: 'your-redirect-uri-here',
scopes: ['openid', 'profile', 'email'],
};
try {
const response = await fetch('https://api.example.com/data', {
headers: {
Authorization: `Bearer ${token}`,
},
});
const data = await response.json();
console.log(data);
} catch (error) {
console.log(error);
}
};
return (
<View>
{user ? (
<View>
<Text>Logged in as {user.name}</Text>
<Button title="Logout" onPress={logout} />
<Button title="Fetch data" onPress={fetchData} />
</View>
) : (
<Button title="Login with Google" onPress={login} />
)}
</View>
);
};
@Service
public class JwtUserDetailsService implements UserDetailsService {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws
UsernameNotFoundException {
User user = userRepository.findByUsername(username);
if (user == null) {
throw new UsernameNotFoundException("User not found with username: " +
username);
}
return new
org.springframework.security.core.userdetails.User(user.getUsername(),
user.getPassword(),
new ArrayList<>());
}
@Service
public class JwtTokenUtil {
@Autowired
private UserDetailsService servicoDetalhesUsuario;
@Autowired
private FiltroRequisicaoJwt filtroRequisicaoJwt;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(servicoDetalhesUsuario);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests().antMatchers("/autenticar").permitAll()
.anyRequest().authenticated()
.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.
STATELESS);
http.addFilterBefore(filtroRequisicaoJwt,
UsernamePasswordAuthenticationFilter.class);
}
@Bean
public PasswordEncoder codificadorSenha() {
return new BCryptPasswordEncoder();
}
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
}
@Service
public class ServicoDetalhesUsuarioJwt implements UserDetailsService {
@Autowired
private RepositorioUsuario repositorioUsuario;
@Override
public UserDetails loadUserByUsername(String nomeUsuario) throws
UsernameNotFoundException {
Usuario usuario = repositorioUsuario.buscarPorNomeUsuario(nomeUsuario);
if (usuario == null) {
throw new UsernameNotFoundException("Usuário não encontrado com nome de
usuário: " + nomeUsuario);
}
return new
org.springframework.security.core.userdetails.User(usuario.getNomeUsuario(),
usuario.getSenha(),
new ArrayList<>());
}