Ruby OAuth2.0: тип учетных данных клиента имеет неподдерживаемый метод проверки подлинности клиента - PullRequest
0 голосов
/ 05 февраля 2019

Я использую OAuth2 gem для аутентификации client_credential.Мой код, как показано ниже,

require 'oauth2'
client = OAuth2::Client.new("my_client_id", "my_client_secret", :site => "my_site_url", :token_url => "oauth2/token")
client.client_credentials.get_token

Когда я выполняю вышеуказанный блок кода, он отвечает с ошибкой ниже,

OAuth2::Error (invalid_client: Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method))
{
  "error":"invalid_client","error_description":"Client authentication failed (e.g., unknown client, no client authentication included, or unsupported authentication method)",
  "error_hint":"The OAuth 2.0 Client supports client authentication method "client_secret_basic", but method "client_secret_post" was requested. 
  You must configure the OAuth 2.0 client's "token_endpoint_auth_method" value to accept "client_secret_post".","status_code":401}

Я проверил использование библиотеки 'net / http', и мойclient_id & client_secrets действительны и работают.

Единственная проблема, которую я вижу, заключается в способе аутентификации, как сказано в подсказке вышеупомянутого сообщения,

The OAuth 2.0 Client supports client authentication method "client_secret_basic", but method "client_secret_post" was requested. You must configure the OAuth 2.0 client's "token_endpoint_auth_method" value to accept "client_secret_post"

Что я хочу знатьявляется?

  1. Как OAuth2 gem решает использовать client_secret_post против client_secret_basic?Я имею в виду Как я могу запросить с client_secret_basic в геме OAuth2?
  2. Если не выше, то как мне указать token_endpoint_auth_method для приема client_secret_post?

1 Ответ

0 голосов
/ 05 февраля 2019

ОК, так что, наконец, я очистил эти точки.

  1. Gem OAuth2 делает запрос к серверу OAuth с параметром --token_endpoint_auth_method, равным 'client_secret_post'.

  2. При регистрации клиента на OAuth-сервере нам нужно установить token_endpoint_auth_method в значение «client_secret_post», чтобы он работал.

В моем случае я использовал Hydra, поэтомуЯ использовал следующую команду для создания клиента:

hydra clients create --endpoint <OAuth server url> --id CLIENT_ID --secret CLIENT_SECRET \
--token-endpoint-auth-method 'client_secret_post' -g client_credentials

Теперь, используя эти CLIENT_ID и CLIENT_SECRET с oauth2, работает.

Но еще один момент, который неясен - могу ли я сделать запрос с token_endpoint_auth_method установлен на client_secret_basic с использованием гема oauth2.

...