【问题标题】:Can't Define Services in CAS Overlay Template v. 6.4 (Docker)无法在 CAS Overlay Template v. 6.4 (Docker) 中定义服务
【发布时间】:2021-03-29 09:09:24
【问题描述】:

使用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 时,我被告知

“应用程序未授权使用 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
}

根据我在 Dockerfile 中看到的内容,对于 Misagh 回答的第 2 部分,/etc/cas/services 目录在 ./gradlew 运行时根本不存在,因此服务不存在t 注册。

如果我放入我的 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

【问题讨论】:

    标签: cas


    【解决方案1】:

    我做错了什么?

    很多东西。

    • 您的服务在/etc/cas/services/services.json 中作为单个 JSON 文件。这是不正确的。您需要每个 1 个应用程序有 1 个文件。请参阅 JSON 服务注册表的文档。
    • cas.service-registry.json.location 应该指向找到此类 JSON 文件的目录位置。您需要确保 Docker 设置点中的此位置或包含您的服务定义。

    【讨论】:

    • 谢谢,米萨。路径必须采用以下格式:“cas.service-registry.json.location=file:/etc/cas/services”。
    猜你喜欢
    • 2020-04-19
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多