簡體   English   中英

在 Keycloak 客戶端中,我收到 URL 未找到錯誤 404

[英]In Keycloak Client I get a URL Not Found Error 404

我是 Keycloak 的新手,在使用示例客戶端時遇到了問題。

我正在使用以下版本:

  1. Keycloak 服務器版本 20.0.2
  2. Python 版本 3.8.8
  3. python-keycloak-client v 2.3.0。

代碼

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.2

創建令/客戶 ID

在此處輸入圖像描述

在此處輸入圖像描述

添加用戶(用戶名=user1,密碼=“1234”)

在此處輸入圖像描述

get-token.py 與python-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'])

結果

在此處輸入圖像描述

參考

Python Keycloak 文檔

github Python 鑰匙斗篷

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM