无法在 CAS 覆盖模板 v. 6.4 中定义服务 (Docker)
Can't Define Services in CAS Overlay Template v. 6.4 (Docker)
使用 cas-overlay-template,我正在尝试从 HTTP(s)://localhost/admin:
访问 CAS 登录屏幕
https://localhost:8443/cas/login?service=https%3A%2F%2F0.0.0.0%2Fadmin
为此,我尝试在 /etc/cas/services/services.json:
中定义服务
{
"@class" : "org.apereo.cas.services.RegexRegisteredService",
"serviceId" : "^http://.*",
"name" : "http_services",
"allowed": true,
"ssoEnabled": true,
"anonymousAccess": false,
"id" : 1,
"evaluationOrder" : 1
},
{
"@class" : "org.apereo.cas.services.RegexRegisteredService",
"serviceId" : "^https://.*",
"name" : "https_services",
"allowed": true,
"ssoEnabled": true,
"anonymousAccess": false,
"id" : 2,
"evaluationOrder" : 2
}
FWIW,我还尝试根据描述的模式定义服务文件 here。
在/etc/config/cas.properties中,我定义了以下内容:
cas.server.name=https://cas.example.org:8443
cas.server.prefix=${cas.server.name}/cas
cas.service-registry.json.location=classpath:/services
logging.config=file:/etc/cas/config/log4j2.xml
最后在 build.gradle 中,我添加了对 JSON 服务注册表的支持:
dependencies {
...
implementation "org.apereo.cas:cas-server-support-json-service-registry:${casServerVersion}"
}
无论我做什么,在构建 运行 Docker 图像之后,我总是得到相同的结果:
INFO [org.apereo.cas.services.AbstractServicesManager] - <Loaded [0] service(s) from [JsonServiceRegistry].>
当我去URL的时候,有人告诉我
"Application Not Authorized to Use CAS".
我做错了什么?
奖金问题:https://cas.example.org:8443 在 URL 中不起作用。我是否需要在 docker 容器中编辑某些内容才能将其映射到我的本地计算机?
--更新--
如回答中所述,我需要创建一个单独的命名服务:
// File: /etc/cas/services/today-12345.json
{
"@class":"org.apereo.cas.services.RegexRegisteredService",
"serviceId":"^(https|http|imaps)://.*",
"name":"today",
"id" :12345
}
Misagh 回答的第 2 部分,根据我在 Dockerfile 中看到的内容,/etc/cas/services 目录在 ./gradlew 运行时根本不存在,因此服务未注册。
如果我放入我的 cas.properties 文件
cas.service-registry.json.location=/etc/cas/services
我得到一个堆栈跟踪,其中包括:
Caused by: java.io.FileNotFoundException: class path resource [etc/cas/services] cannot be resolved to URL because it does not exist
如果我/bin/sh进入容器,我可以看到/etc/cas/services目录里面的服务。
在构建 Docker 容器后,我通过简单地复制 .json 文件来解决这个问题
docker cp ~/emu/cas-overlay-template/etc/cas/services/today-12345.json [CONTID]:/tmp/services
(/tmp/services 因为控制台输出显示它正在监视服务)
-- 解决方案 --
路径必须是:
cas.service-registry.json.location=file:/etc/cas/services
What am I doing wrong?
很多事情。
- 您的服务在
/etc/cas/services/services.json
中作为单个 JSON 文件。那是不正确的。每 1 个应用程序需要 1 个文件。请查阅 JSON 服务注册表的文档。
cas.service-registry.json.location
应指向找到此类 JSON 文件的目录位置。您需要确保此位置在您的 Docker 设置点中或包含您的服务定义。
使用 cas-overlay-template,我正在尝试从 HTTP(s)://localhost/admin:
访问 CAS 登录屏幕https://localhost:8443/cas/login?service=https%3A%2F%2F0.0.0.0%2Fadmin
为此,我尝试在 /etc/cas/services/services.json:
中定义服务{
"@class" : "org.apereo.cas.services.RegexRegisteredService",
"serviceId" : "^http://.*",
"name" : "http_services",
"allowed": true,
"ssoEnabled": true,
"anonymousAccess": false,
"id" : 1,
"evaluationOrder" : 1
},
{
"@class" : "org.apereo.cas.services.RegexRegisteredService",
"serviceId" : "^https://.*",
"name" : "https_services",
"allowed": true,
"ssoEnabled": true,
"anonymousAccess": false,
"id" : 2,
"evaluationOrder" : 2
}
FWIW,我还尝试根据描述的模式定义服务文件 here。
在/etc/config/cas.properties中,我定义了以下内容:
cas.server.name=https://cas.example.org:8443
cas.server.prefix=${cas.server.name}/cas
cas.service-registry.json.location=classpath:/services
logging.config=file:/etc/cas/config/log4j2.xml
最后在 build.gradle 中,我添加了对 JSON 服务注册表的支持:
dependencies {
...
implementation "org.apereo.cas:cas-server-support-json-service-registry:${casServerVersion}"
}
无论我做什么,在构建 运行 Docker 图像之后,我总是得到相同的结果:
INFO [org.apereo.cas.services.AbstractServicesManager] - <Loaded [0] service(s) from [JsonServiceRegistry].>
当我去URL的时候,有人告诉我
"Application Not Authorized to Use CAS".
我做错了什么?
奖金问题:https://cas.example.org:8443 在 URL 中不起作用。我是否需要在 docker 容器中编辑某些内容才能将其映射到我的本地计算机?
--更新--
如回答中所述,我需要创建一个单独的命名服务:
// File: /etc/cas/services/today-12345.json
{
"@class":"org.apereo.cas.services.RegexRegisteredService",
"serviceId":"^(https|http|imaps)://.*",
"name":"today",
"id" :12345
}
Misagh 回答的第 2 部分,根据我在 Dockerfile 中看到的内容,/etc/cas/services 目录在 ./gradlew 运行时根本不存在,因此服务未注册。
如果我放入我的 cas.properties 文件
cas.service-registry.json.location=/etc/cas/services
我得到一个堆栈跟踪,其中包括:
Caused by: java.io.FileNotFoundException: class path resource [etc/cas/services] cannot be resolved to URL because it does not exist
如果我/bin/sh进入容器,我可以看到/etc/cas/services目录里面的服务。
在构建 Docker 容器后,我通过简单地复制 .json 文件来解决这个问题
docker cp ~/emu/cas-overlay-template/etc/cas/services/today-12345.json [CONTID]:/tmp/services
(/tmp/services 因为控制台输出显示它正在监视服务)
-- 解决方案 --
路径必须是:
cas.service-registry.json.location=file:/etc/cas/services
What am I doing wrong?
很多事情。
- 您的服务在
/etc/cas/services/services.json
中作为单个 JSON 文件。那是不正确的。每 1 个应用程序需要 1 个文件。请查阅 JSON 服务注册表的文档。 cas.service-registry.json.location
应指向找到此类 JSON 文件的目录位置。您需要确保此位置在您的 Docker 设置点中或包含您的服务定义。