Действительный, работающий домен выдает "socket.gaierror: [Errno -2] Имя или служба не известны" - PullRequest
0 голосов
/ 15 сентября 2018

Я работаю над проектом, в котором мне нужно реализовать SSO. Мои учетные данные SSO OAuth2 соответствуют следующим параметрам:

SECRET = 'abcdefghijklmn12345678'
ACCESS_TOKEN_URL = "https://myprovider.example.com/as/token.oauth2"
USER_API_URL = "https://myprovider.example.com/idp/userinfo.openid"
JWKS_URL = "https://myprovider.example.com/pf/JWKS"
REDIRECT_URI = "http://localhost/api/1/auth/ping"
AUTH_ENDPOINT = "https://myprovider.example.com/as/authorization.oauth2"

Библиотека, которую я использую, была протестирована и должна работать, но по какой-то причине не работает с:

[2018-09-13 14:09:29,796] ERROR in app: Exception on /api/1/auth/ping [POST]
Traceback (most recent call last):
  File "/www/lemur/lib/python3.6/site-packages/urllib3/connection.py", line 171, in _new_conn
    (self._dns_host, self.port), self.timeout, **extra_kw)
  File "/www/lemur/lib/python3.6/site-packages/urllib3/util/connection.py", line 59, in create_connection
    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
  File "/usr/lib/python3.6/socket.py", line 745, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/www/lemur/lib/python3.6/site-packages/urllib3/connectionpool.py", line 600, in urlopen
    chunked=chunked)
  File "/www/lemur/lib/python3.6/site-packages/urllib3/connectionpool.py", line 343, in _make_request
    self._validate_conn(conn)
  File "/www/lemur/lib/python3.6/site-packages/urllib3/connectionpool.py", line 849, in _validate_conn
    conn.connect()
  File "/www/lemur/lib/python3.6/site-packages/urllib3/connection.py", line 314, in connect
    conn = self._new_conn()
  File "/www/lemur/lib/python3.6/site-packages/urllib3/connection.py", line 180, in _new_conn
    self, "Failed to establish a new connection: %s" % e)
urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x7fc15ed415f8>: Failed to establish a new connection: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/www/lemur/lib/python3.6/site-packages/requests/adapters.py", line 445, in send
    timeout=timeout
  File "/www/lemur/lib/python3.6/site-packages/urllib3/connectionpool.py", line 638, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/www/lemur/lib/python3.6/site-packages/urllib3/util/retry.py", line 398, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='myprovider.example.com', port=443): Max retries exceeded with url: /as/token.oauth2?grant_type=authorization_code&scope=openid+email+profile&code=abcdef123-ghijklm456&redirect_uri=http%3A%2F%2Flocalhost%2Fapi%2F1%2Fauth%2Fping&client_id=lemur (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7fc15ed415f8>: Failed to establish a new connection: [Errno -2] Name or service not known',))

После небольшой отладки я обнаружил, что исключение связано с r = requests.post(access_token_url, headers=headers, params=params, verify=verify_cert) в библиотеке SSO.

Я распечатал значение access_token_url, которое было https://myprovider.example.com/as/token.oauth2.

Некоторые сотрудники Google сообщили мне, что socket.gaierror: [Errno -2] Name or service not known может происходить из-за того, что он ожидал имя хоста, а не URL, то есть просто myprovider.example.com/as/token.oauth2 (без https://). Имя хоста myprovider.example.com/as/token.oauth2 никуда не денется, и посещение его в браузере возвращает сообщение «Не удалось получить ответ». Однако посещение https://myprovider.example.com/as/token.oauth2 работает просто отлично.

Мой провайдер требует https:// впереди (например, https://myprovider.example.com/as/token.oauth2), в противном случае я получу сообщение "Не удалось получить ответ" из браузера. Даже добавление порта 443 в качестве myprovider.example.com:443/as/token.oauth2 не будет работать. http://myprovider.example.com также не перенаправляет на https и возвращает сообщение «Не удалось получить ответ».

Разбор https://, поэтому access_token_url = 'myprovider.example.com/as/token.oauth2' тоже не работает.

Может ли быть необходимым использование https:// (или, что более вероятно, невозможность обойтись без него)?

Спасибо!

...