Как сообщить клиентам API OAuth2 об отсутствующих учетных данных? - PullRequest
0 голосов
/ 09 мая 2018

Я создаю REST API с использованием Vert.x и хотел бы добавить аутентификацию OAuth2.

В моей текущей настройке неаутентифицированные запросы будут автоматически перенаправлены на страницу входа на сервер OAuth2 (keycloak). Это неправильно при работе с REST API. Вместо этого я ожидаю, что мой сервер API REST вернет 401 и, следовательно, позволит клиенту разобраться с процессом получения токена доступа.

Есть ли лучшая практика для этого варианта использования? Как обрабатывать неаутентифицированные запросы к защищенным ресурсам?

1 Ответ

0 голосов
/ 09 мая 2018

Если токен доступа отсутствует, вы должны вернуть HTTP 400. Если токен недействителен, это должен быть HTTP 401, как показано в https://tools.ietf.org/html/rfc6750#section-3.1:

3,1. Коды ошибок

При сбое запроса сервер ресурсов отвечает, используя
соответствующий код состояния HTTP (обычно 400, 401, 403 или 405) и
включает в ответ один из следующих кодов ошибок:

invalid_request

     The request is missing a required parameter, includes an
     unsupported parameter or parameter value, repeats the same
     parameter, uses more than one method for including an access
     token, or is otherwise malformed.  The resource server SHOULD
     respond with the HTTP 400 (Bad Request) status code.

invalid_token

     The access token provided is expired, revoked, malformed, or
     invalid for other reasons.  The resource SHOULD respond with
     the HTTP 401 (Unauthorized) status code.  The client MAY
     request a new access token and retry the protected resource
     request.

insufficient_scope

     The request requires higher privileges than provided by the
     access token.  The resource server SHOULD respond with the HTTP
     403 (Forbidden) status code and MAY include the "scope"
     attribute with the scope necessary to access the protected
     resource.

Если в запросе отсутствует какая-либо информация для аутентификации (например, клиент не знал, что аутентификация необходима или предпринята попытка используя неподдерживаемый метод аутентификации), сервер ресурсов НЕ СЛЕДУЕТ включать код ошибки или другую информацию об ошибке.

Например:

 HTTP/1.1 401 Unauthorized
 WWW-Authenticate: Bearer realm="example"
...