如何在Weblogic中设置KeyClope
我正在使用我的游乐场如何在Weblogic中设置KeyClope,weblogic,servlet-filters,keycloak,Weblogic,Servlet Filters,Keycloak,我正在使用我的游乐场keydape 2.5.5-finaldocker图像和weblogic 12.2.1docker图像 我已经创建了一个密钥斗篷并集成到我的app.war(在web.xml中) 现在,当我尝试访问servlet并使用令牌调用它时,出现了以下问题: GET https://localhost:7005/test/ Accept: */* Cache-Control: no-cache Authorization: bearer eyJhbGc.... 我从weblogic获得
keydape 2.5.5-final
docker图像和weblogic 12.2.1
docker图像
我已经创建了一个密钥斗篷并集成到我的app.war(在web.xml中)
现在,当我尝试访问servlet并使用令牌调用它时,出现了以下问题:
GET https://localhost:7005/test/
Accept: */*
Cache-Control: no-cache
Authorization: bearer eyJhbGc....
我从weblogic获得:错误401——未经授权的
我将此理解为:调用尝试对weblogic进行身份验证,而不是对KeyClope进行身份验证。到达keydape过滤器,因为我可以看到在过滤器中完成的日志记录
我的问题是:我必须在weblogic中设置一些东西才能识别KeyClope过滤器吗?
下面是该应用程序的weblogic.xml
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.6/weblogic-web-app.xsd">
<context-root>test</context-root>
<session-descriptor>
<cookie-secure>true</cookie-secure>
</session-descriptor>
<container-descriptor>
<prefer-application-packages>
<package-name>javax.faces.*</package-name>
<package-name>net.sf.cglib.*</package-name>
<package-name>org.objectweb.asm.*</package-name>
<package-name>antlr.*</package-name>
<package-name>com.fasterxml</package-name>
<package-name>org.apache.logging.*</package-name>
<package-name>org.keycloak.*</package-name>
</prefer-application-packages>
<prefer-application-resources>
<resource-name>META-INF/resources/javax.faces.*</resource-name>
<resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
</prefer-application-resources>
</container-descriptor>
<charset-params>
<input-charset>
<resource-path>/*</resource-path>
<java-charset-name>UTF-8</java-charset-name>
</input-charset>
</charset-params>
</weblogic-web-app>
即使我可以从weblogic容器到KeyClope容器进行卷曲并接收访问令牌:
curl -X POST -d "grant_type=password" -d "client_id=test" -d "username=demo"
-d "password=demodemo" "http://localhost:8080/auth/realms/demo/protocol/openid-connect/token"
问题在于我从中得出的localhost
。解决方案是在keydove设置(keydove.json
或您可能拥有的其他设置)中使用您自己的ip而不是本地主机
curl -X POST -d "grant_type=password" -d "client_id=test" -d "username=demo"
-d "password=demodemo" "http://localhost:8080/auth/realms/demo/protocol/openid-connect/token"
{
"realm": "demo",
"auth-server-url": "http://myip:8080/auth", //instead of localhost
"ssl-required": "external",
"resource": "test",
"public-client": true
}