Базовая аутентификация пружины с помощью Restangular

0

Я использую Restangular с Spring oauth security, а на стороне клиента я использую Restangular для запроса на вход.

Код в OAuth2ServerConfiguration:

   @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients
            .inMemory()

                .withClient("clientapp")
                    .authorizedGrantTypes("password", "refresh_token")
                    .authorities("USER")
                    .scopes("read", "write")
                    .secret("abc");
        }

Логин с почтальоном нуждается в этих конфигурациях:

1-Set Authorization as "Basic Auth".
2-Set username,password as {"username":"clientapp","password":"abc"}//credentials to access server side
3-In request body through "x-www-form-urlencoded" three parameters are sent.
  {"username":"[email protected]","password":"abc123","grant_type":"password"}//credentials to login which are checked from database.

Это будет успешным login.but, но я не могу понять, как использовать эти конфигурации в Angular JS Restangular call.

в настоящее время m пытается с этим.

В Config:

    RestangularProvider.withConfig(function (RestangularConfigurer) {
   return RestangularConfigurer.setDefaultHeaders({ "Authorization": "Basic Y2xpZW50YXBwOkxNUw==",
        "username":"clientapp",
        "password":"abc",
        "Content-type": "application/x-www-form-urlencoded; charset=utf-8"
            });

В контроллере:

     Restangualar.all("oauth/login").post({username;$scope.user.username,
     password:"$scope.user.password","grant_type":"password"}).then(function(){
 console.log(res);
  });

Но я получаю эту ошибку:

  error:"unauthorized",error_description:"Full authentication is required to access this resource"  

в браузере.

Примечание. Этот ресурс не защищен.

Любое решение???

Обновление: я забыл добавить основную информацию о том, что мой интерфейс с угловым движком работает независимо от localhost (через xampp), в то время как backend backend на localhost: 8080..

Ошибка в сетевой вкладке:

Изображение 174551

2-

public void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http
            .authorizeRequests()
            .anyRequest().permitAll()
            //.antMatchers("/users").permitAll()
         .antMatchers(HttpMethod.OPTIONS, "/oauth/token").permitAll()
         .and().csrf().disable();
    }

3-

  endpoints
            .tokenStore(this.tokenStore)
            .authenticationManager(this.authenticationManager)
            .userDetailsService(userDetailsService)
            .addInterceptor(new HandlerInterceptorAdapter() {

                public boolean preHandle(HttpServletRequest hsr,         HttpServletResponse rs, Object o,FilterChain chain) throws Exception {
                    rs.setHeader("Access-Control-Allow-Origin", "*");
                    rs.setHeader("Access-Control-Allow-Methods",  "GET,OPTIONS,POST");
                   // rs.setHeader("Access-Control-Max-Age", "7200");
                    rs.setHeader("Access-Control-Allow-Headers", "Origin, X-  Requested-With, Content-Type, Accept, Authorization");
                    HttpServletRequest httpServletRequest = (HttpServletRequest) hsr;
                    if (httpServletRequest.getMethod().equalsIgnoreCase("OPTIONS")) {
                      chain.doFilter(hsr, rs);
                    } else {
                        // In case of HTTP OPTIONS method, just return the response
                        return true;
                    }
                    return false;
                    }
                });
Теги:
spring
restangular

2 ответа

0

Вы можете использовать стандартный постстандарт. См. Документацию.

Пример:

Restangular.service("/oauth/login").one().customPOST(
  {},
  '',
  {
    // Params...
    grant_type: 'password',
    client_id: 'clientapp',
    client_secret: 'abc',
    username: '[email protected]',
    password: 'abc123',
    scope: 'read, write'
  },
  {
    // headers...
  }).then(
    function (response) {
      // Manage successfull response
    },
    function () {
      // Manage error response
    }
);

Надеюсь, поможет

0

ОБНОВЛЕНО:

Кажется, это проблема CORS, много ответов уже для нее, но в вашем случае с использованием XAMPP вам нужно настроить сервер Apache:

https://enable-cors.org/server_apache.html.

ПРЕДЫДУЩИЙ ОТВЕТ ПЕРЕД ОБНОВЛЕНИЕМ:

Преимущество использования restangular заключается в способности управлять ресурсами более семантическим способом и возможностью получать вложенные ресурсы. Все эти преимущества на самом деле не применяются для вызова только для получения токена у поставщика oauth2.

Я бы рекомендовал забыть об использовании restangular для этого конкретного вызова (вы все еще можете использовать его для всего остального в своем приложении) и конвертировать этот вызов в простой $ http.post.

$http.post('oauth/login', 
           {  username;$scope.user.username,
              password:"$scope.user.password",
              "grant_type":"password"
           }, 
           {
                headers: { "Authorization": "Basic Y2xpZW50YXBwOkxNUw==",
                           "username":"clientapp",
                           "password":"abc",
                           "Content-type": "application/x-www-form-urlencoded; charset=utf-8"
                         }
            })
            .then(function(response) {
                Restangular.setDefaultHeaders({
                     "Authorization": "Bearer " + response.token
                });
            });

Таким образом, вы просто используете $ http.post, и по его ответу устанавливают заголовки по умолчанию в угловом режиме для использования извлеченного токена.

Ура,

  • 0
    Я использовал ту же конфигурацию в http, а также с Restrict во внешнем интерфейсе в том же домене (оба на localhost: 8080). это работало там, но то же самое не работает на отдельном домене.
  • 0
    Если это так, то это звучит как проблема с CORS, проверили ли вы, что такое неудачный ответ, когда он терпит неудачу?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню