Я работаю над проектом, в котором мне нужно реализовать 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://
(или, что более вероятно, невозможность обойтись без него)?
Спасибо!