SpringCloud OAuth2 + JWT 인증 인증(一) 인증 서버
6210 단어 SpringCloud
시리즈
Spring Cloud oAuth2(1) 라이센스 서버 구축 및 액세스
Spring Cloud oAuth2(2) 리소스 서버 구축 및 테스트
SpringCloud OAuth2 + JWT 인증 인증(一) 인증 서버
SpringCloud OAuth2 + JWT 인증 인증(2) 리소스 서버
카탈로그
소개
솔리드 객체
권한 부여 구성
결말
소개
여기서 개인이 제3자 권한 수여 서비스를 구축하는 과정에서 겪은 문제점을 정리한다.만약 불필요한 제3자 로그인이 아니라면 하나의 JWT는 간단한 권한 수여 검증을 만족시킬 수 있지만 관련 검증과 권한 수여는 스스로 써야 한다.본문 원본: 원본 주소.
솔리드 객체
@Data
@Entity
public class Role implements GrantedAuthority, Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false,unique = true)
private String name;
@Override
public String getAuthority() {
return name;
}
}
@Data
@Entity
public class User implements UserDetails, Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false,unique = true)
private String username;
private String password;
@ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinTable(
name = "user_role",
joinColumns = {@JoinColumn(name = "user_id",referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name="role_id",referencedColumnName = "id")}
)
List authorities;
@Override
public Collection extends GrantedAuthority> getAuthorities() {
return authorities;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
주의: 대상과 관련된 캐릭터 정보는 반드시 되돌아와야 합니다. (authorities) 여기 본인은 빨리 되돌아와야 합니다.
권한 부여 구성
public interface UserDao extends JpaRepository {
User findUserByUsername(String username);
}
@Service
public class UserService implements UserDetailsService {
@Autowired
private UserDao userDao;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
return userDao.findUserByUsername(username);
}
}
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserService userService;
@Bean
public PasswordEncoder passwordEncoder()
{
return new BCryptPasswordEncoder();
}
// http ,
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.exceptionHandling()
.authenticationEntryPoint((request,response,authException)->response.sendError(HttpServletResponse.SC_UNAUTHORIZED))
.and()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.httpBasic();
}
//
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.userDetailsService(userService)
.passwordEncoder(passwordEncoder());
}
//
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
}
@Configuration
@EnableAuthorizationServer
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter {
@Autowired
@Qualifier("authenticationManagerBean")
public AuthenticationManager authenticationManager;
@Autowired
private PasswordEncoder passwordEncoder;
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients
.inMemory()
.withClient("kevin")
.secret(passwordEncoder.encode("kevin12345"))
.scopes("client")
.authorizedGrantTypes("password","refresh_token")
.accessTokenValiditySeconds(3600);
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints
//
.tokenStore(new JwtTokenStore(jwtTokenEnhancer()))
//
.tokenEnhancer(jwtTokenEnhancer())
//
.authenticationManager(authenticationManager);
}
//jwt , jwt
public JwtAccessTokenConverter jwtTokenEnhancer()
{
//RSA , ,
KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("auth-jwt.jks"),"jwt12345".toCharArray());
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setKeyPair(keyStoreKeyFactory.getKeyPair("auth-jwt","jwt12345".toCharArray()));
return converter;
}
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security
.tokenKeyAccess("permitAll()")
.checkTokenAccess("permitAll()")
.allowFormAuthenticationForClients();
}
참고:
결말
이곳은 단지 간단한 데모일 뿐, 생산용은 아직 부족한 점이 많다. 예를 들어 토큰에서 물러나 효력을 잃는 등이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SpringCloud OAuth2 + JWT 인증 인증(一) 인증 서버Spring Cloud oAuth2(1) 라이센스 서버 구축 및 액세스 Spring Cloud oAuth2(2) 리소스 서버 구축 및 테스트 SpringCloud OAuth2 + JWT 인증 인증(一) 인증 서버 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.