Имя пользователя и пароль считаются анонимными в режиме пароля Spring-security-oauth2 - PullRequest
0 голосов
/ 17 марта 2019

Я использую Spring Boot и Spring Security OAuth2 для выдачи токенов во внешний интерфейс.

Почтальон
Когда я использую почтальон для проверки, все работает нормально.

Using postman to get access_token.

Браузер
Но когда я отправил тот же запрос в браузер, используя vue.js и axios, он не работал должным образом. Код состояния был 401.

Gerneral:
Request URL: http://localhost:8080/oauth/token
Request Method: POST
Status Code: 401 
Remote Address: [::1]:8080
Referrer Policy: no-referrer-when-downgrade

Response Headers:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:8081
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Content-Type: application/json;charset=UTF-8
Date: Sun, 17 Mar 2019 02:20:54 GMT
Expires: 0
Pragma: no-cache
Transfer-Encoding: chunked
Vary: Origin, Access-Control-Request-Method, Access-Control-Request-Headers
WWW-Authenticate: Basic realm="oauth2/client"
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

Request Headers:
Provisional headers are shown
Accept: application/json, text/plain, */*
Content-Type: application/x-www-form-urlencoded
Origin: http://localhost:8081
Referer: http://localhost:8081/login
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36
Form Data:
{"grant_type":"password","scope":"all","username":"admin","password":"888","client_id":"wellcell","client_secret":"wellcell"}: 

Разница в журнале консоли сервера
Я сделал картину бок о бок:

comparison

С левой стороны находится консольный журнал сервера запроса почтальона. А серверная консоль журнала запросов браузера находится справа.

После «ClientCredentialsTokenEndpointFilter» запрос почтальона перешел к «DaoAuthenticationProvider» для аутентификации. Но запрос браузера перешел к «BasicAuthencationFilter», «имя пользователя» и «пароль» были проигнорированы, и был возвращен анонимный пользователь. Затем доступ запрещен анонимному пользователю.

У кого-нибудь были подобные проблемы раньше?

1 Ответ

0 голосов
/ 17 марта 2019

Я думаю проблема с Content-Type: application/x-www-form-urlencoded.Если вы отправляете json, вам нужно использовать Content-Type: application/json.Простое использование axios с постом json:

axios.post("http://localhost:8080/oauth/token", { 
  "grant_type": "password",
  "scope": "all",
  "username": "admin",
  "password": "888",
  "client_id": "wellcell",
  "client_secret": "wellcell"
}).then((response) => {
  console.log(response.data);
});
...