как сохранить токен в базе данных и проверить его в авторизации - PullRequest
0 голосов
/ 02 апреля 2019

Я использую шаблон jdbc для аутентификации пользователя и в памяти, чтобы авторизовать клиент для весенней загрузки приложения, и я хочу подключиться базы данных и и сохранить токен в памяти в базу данных и проверить каждый раз, когда проверяешь запрос на почтальона.

Я не хочу использовать hibernate и, используя jdbctemplate, можем ли мы хранить токен не имя клиента и секретный ключ.

примечание: аутентификация работает нормально.

 @EnableResourceServer
  @Configuration
public class ResourceServerConfig extends WebSecurityConfigurerAdapter{



    @Autowired
    private UserDetailsService customUserDetailsService;

    @Autowired
    private Master master;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
    http.requestMatchers().antMatchers("/home/**")
        .and()
        .authorizeRequests()
        .anyRequest()
        .authenticated()
        .and()
        .csrf()
        .disable()
        .formLogin()
        .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        master.setJdbcTemplate();


        auth.jdbcAuthentication().dataSource(master.jdbcTemplate.getDataSource())
          .usersByUsernameQuery(
           "Select a.UserName,a.password,a.enable from [Auth_User] a where username=?")
          .authoritiesByUsernameQuery(
           "select a.UserName,a.role  from [Auth_User] a where username=?");
          .passwordEncoder(new BCryptPasswordEncoder());
    }

    @Override
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }


}







///////////////////////authorization i need to change the code here to store the generated token in database and validate against it//////////////////////////////////


@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter{

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security.tokenKeyAccess("permitAll()")
                .checkTokenAccess("isAuthenticated()");
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
               .withClient("ClientId")
               .secret("{noop}secret")
               .authorizedGrantTypes("authorization_code","password","refresh_token")
               .scopes("user_info")
               .autoApprove(true)
               .accessTokenValiditySeconds(1*60);
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.authenticationManager(authenticationManager);
    }


}

1 Ответ

0 голосов
/ 17 апреля 2019

вместо Jdbc я использовал Jpa и Spring Security либо с использованием JWT, либо с использованием Oauth2, я использовал Oauth2, и это ссылка, которую я указал

https://github.com/TechPrimers/spring-security-oauth-mysql-example

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...