繁体   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