簡體   English   中英

使用Keycloak進行安全保護后,無法使用有效的Keycloak令牌訪問REST服務

[英]Can't access REST service with valid keycloak token after secure with keycloak

使用keycloak Java API獲取有效令牌,然后使用此令牌嘗試訪問已通過keycloak保護但沒有404錯誤(未找到)的rest服務。

似乎令牌無法正常工作?

這是我的Java代碼,用於從keycloak獲取令牌。 這似乎起作用:

AuthzClient authzClient = AuthzClient.create();
AccessTokenResponse response = authzClient.obtainAccessToken(user, password);

我在響應中得到一個有效的令牌。 然后,我嘗試使用此令牌訪問使用keycloak保護的REST服務:

    String urlString = "http://localhost:3333/appname-1.0.0-SNAPSHOT/project/0.1/device/return/all";

    URL url = new URL(urlString); 
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setRequestMethod("GET");
    String authString = "Bearer " + tokenStr;
    con.setRequestProperty("Authorization", authString);
    basicStatus = con.getResponseCode();

basicStatus返回404

我通過添加web.xml文件和keycloak.json文件來使用REST服務保護war文件。 如果我從戰爭中刪除了web.xml和keycloak.json文件,那么上面的代碼將返回200。但是該服務並不安全。

web.xml:

<module-name>application</module-name>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Device</web-resource-name>
        <url-pattern>/device/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>device</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>KEYCLOAK</auth-method>
    <realm-name>this is ignored currently</realm-name>
</login-config>

<security-role>
    <role-name>device</role-name>
</security-role>

用戶在密鑰斗篷中具有設備角色。

有任何想法嗎?

我會先說,請從您的“ http:// localhost:3333 / .......”資源服務器根目錄URL中刪除“ http://”,然后重試。 如果那不能解決您的問題,我建議您使用郵遞員之類的工具,以便您可以更快地測試/制作原型。

1-使用此endponit獲取令牌(以x-www-form-urlencoded發送):HOST:PORT / auth / realms / YOUR_REALM / protocol / openid-connect / token

2個參數是:grant_type(值:密碼),client_id,usernmae和密碼(如果客戶端的訪問類型為“機密”或“僅承載者”,則還需要使client_secret私有)

3完成這項工作后,只需在Java客戶端中檢查您是否使用了相同的值即可。

希望能幫助到你。

編輯:好的,這是11個月大的XD。...沒關系

暫無
暫無

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

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