[英]In Keycloak Client I get a URL Not Found Error 404
我是 Keycloak 的新手,在使用示例客戶端時遇到了問題。
我正在使用以下版本:
from keycloak.realm import KeycloakRealm
realm = KeycloakRealm(server_url=‘https://auth/.******.’, realm_name=‘jasonrealm’)
oidc_client = realm.open_id_connect(client_id=‘jason-test-client’,
client_secret=‘*********’)
creds = oidc_client.client_credentials()
print(creds)
admin_client = realm.admin
root = admin_client.root()
我得到的錯誤如下:
Traceback (most recent call last):
File "keystore-client1.py", line 9, in
creds = oidc_client.client_credentials()
File "/home/jason/keycloak-client/.venv/lib/python3.8/site-packages/keycloak/openid_connect.py", line 227, in client_credentials
return self._token_request(grant_type='client_credentials', **kwargs)
File "/home/jason/keycloak-client/.venv/lib/python3.8/site-packages/keycloak/openid_connect.py", line 307, in _token_request
return self._realm.client.post(self.get_url('token_endpoint'),
File "/home/jason/keycloak-client/.venv/lib/python3.8/site-packages/keycloak/openid_connect.py", line 34, in get_url
return self.well_known[name]
File "/home/jason/keycloak-client/.venv/lib/python3.8/site-packages/keycloak/well_known.py", line 35, in getitem
return self.contents[key]
File "/home/jason/keycloak-client/.venv/lib/python3.8/site-packages/keycloak/well_known.py", line 27, in contents
self._contents = self._realm.client.get(self._path)
File "/home/jason/keycloak-client/.venv/lib/python3.8/site-packages/keycloak/client.py", line 74, in get
return self._handle_response(
File "/home/jason/keycloak-client/.venv/lib/python3.8/site-packages/keycloak/client.py", line 89, in _handle_response
raise KeycloakClientError(original_exc=err)
keycloak.exceptions.KeycloakClientError: 404 Client Error: Not Found for url: https://auth.******.***/auth/realms/jasonrealm/.well-known/openid-configuration
我期待連接到 Keycloak 服務器。
我嘗試了我能找到的所有版本的python-keycloak-client 。 行為沒有變化。
python-keycloak-client
(v0.2.3) 不支持 Keycloak 20.x 和 19.x 你必須使用舊的(舊版)Keycloak 18.x
存儲庫 URL
https://github.com/Peter-Slump/python-keycloak-client
原因,尋找 OIDC 配置 URL 的python-keycloak-client
但新的 Keycloak v20.x 更改了新的 ULR。 (不同之處在於/auth
)因此該步驟從python-keycloak-client
內部例程失敗。
我認為您有兩種選擇,一種是使用舊的 Keycloak v.18,另一種是使用其他 Python 適配器python-keycloak
老URL
http://keycloakhost:keycloakport/auth/realms/{realm}/.well-known/openid-configuration
新URL
http://keycloakhost:keycloakport/realms/{realm}/.well-known/openid-configuration
我用 v 18.0.2-legacy https://quay.io/repository/keycloak/keycloak?tab=tags&tag=latest測試了你的代碼
它與python-keycloak-client
一起工作
from keycloak.realm import KeycloakRealm
realm = KeycloakRealm(server_url='http://localhost:8080', realm_name='jasonrealm')
oidc_client = realm.open_id_connect(client_id='jason-test-client', client_secret='qJYGwvwnPBAXpFC4oIW2yek9Mo404msU')
creds = oidc_client.client_credentials()
print(creds)
結果
$ python3 test.py
{'access_token': 'eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI2TjUzczZHQXdkREI3QXM3RFRsX2pQanp4MGU4dlJvQlNTUjNXakhnQi1VIn0.eyJleHAiOjE2NzMyOTAyMTEsImlhdCI6MTY3MzI4NjYxMSwianRpIjoiYTI1NWE2NGMtMDE3MC00YWViLThlZmUtODhiNDc2NDc5NDE3IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL2F1dGgvcmVhbG1zL2phc29ucmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNWI2MzQ0MWUtZGM5Ni00OTk0LTliZWUtMzViMmNkYTVmOTQ3IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiamFzb24tdGVzdC1jbGllbnQiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMCJdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsiZGVmYXVsdC1yb2xlcy1qYXNvbnJlYWxtIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7Imphc29uLXRlc3QtY2xpZW50Ijp7InJvbGVzIjpbInVtYV9wcm90ZWN0aW9uIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6ImVtYWlsIHByb2ZpbGUiLCJjbGllbnRIb3N0IjoiMTcyLjE4LjAuMSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiY2xpZW50SWQiOiJqYXNvbi10ZXN0LWNsaWVudCIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC1qYXNvbi10ZXN0LWNsaWVudCIsImNsaWVudEFkZHJlc3MiOiIxNzIuMTguMC4xIn0.CfeVngrlAwg95YVsRwhbyNPrp-cu_3oD7CUF0hTVSA4XbJEP7nTgq34a0AT_zxgjywRSmxnqbmbGJkA3V660fpEyvdAzy5XWLV50bTEuvLY-4tJVyqye8ORFj_CtnCxbHv6sQqlIismBNUVF7GyaBAHrwzLUPoPvTGj7crExKbppImx-VZBlZ1QaE9Pucu0ckR0ke4OYZzAq8Mu7NWzrwXf1WmDoPR-Gwr74UO2E-N12KeLHPQjhEKJ9zaBZ0uhf_nuhNl4LwwAj3fYw6r4vYPIffzSTRzqoRMpXcnX9mvVSfcqCliIlNRpvY-IAswpojwOS5o4PZJwrubI0ZwAvmA', 'expires_in': 3600, 'refresh_expires_in': 0, 'token_type': 'Bearer', 'not-before-policy': 0, 'scope': 'email profile'}
python-keycloak
和 Keycloak v.20.0.2python-keycloak
from keycloak import KeycloakOpenID
# Configure client
keycloak_openid = KeycloakOpenID(server_url="http://localhost:8080/",
client_id="example_client",
realm_name="example_realm",
client_secret_key="CoZmMflBVmPRiek5dJqXap7ew0vDFyMk")
token = keycloak_openid.token("user1", "1234")
print(token['access_token'])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.