Сбой аутентификации CAS с Drupal, но работает как автономный - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь настроить сервер CAS локально, и у меня также работает локально Drupal.Я использую Mongo DB для регистрации билетов CAS и аутентификация пользователя .Для реестра служб CAS я использую основанный на файлах реестр служб JSON .

Мой реестр служб:

{
  "@class": "org.apereo.cas.services.RegexRegisteredService",
  "id": 3,
  "serviceId": "http(s)?:\\/\\/relo.local(:\\d{4,5})?(\\/.*)?$",
  "name": "relo.local",
  "evaluationOrder": 10,
  "accessStrategy": {
    "@class": "org.apereo.cas.services.DefaultRegisteredServiceAccessStrategy",
    "enabled": true,
    "ssoEnabled": true
  },
  "attributeReleasePolicy": {
    "@class": "org.apereo.cas.services.ReturnAllAttributeReleasePolicy"
  }
}

В MongoDB я создал коллекцию под названием accounts вя создал несколько фиктивных пользовательских записей, таких как:

/* 1 */
{
    "_id" : ObjectId("5c24f234e51c56a02af5873f"),
    "username" : "casuser",
    "password" : "casuser",
    "firstname" : "wohn",
    "lastname" : "smith",
    "mail" : "casuser@test.com"
}

/* 2 */
{
    "_id" : ObjectId("5c24f24de51c56a02af58757"),
    "username" : "wasuser",
    "password" : "wasuser",
    "firstname" : "wohn",
    "lastname" : "smith",
    "mail" : "wasuser@test.com"
}

Для реестра заявок мне не нужно создавать какую-либо коллекцию.CAS заботится о создании коллекции реестра заявок и вставляет в нее запись, когда я пытаюсь войти в систему.

Drupal использует модуль cas , который использует библиотеку phpCAS дляподключиться к серверу CAS.

  • Версия Drupal: 7.34
  • Версия phpCAS: 1.3.0
  • Версия CAS: 6.1.0-RC1-SNAPSHOT

CAS предоставляет собственный экран входа в систему.После всех этих конфигураций я могу войти на сервер CAS с учетными записями casuser и wasuser.

My cas.properties file:

# Required CAS settings
cas.server.name=https://localhost:8443
cas.server.prefix=${cas.server.name}/cas

# Log4j config file location
logging.config: file:/etc/cas/config/log4j2.xml
# Control log levels via properties
logging.level.org.apereo.cas=DEBUG

# Restrict admin endpoints (like /status) to localhost
# cas.adminPagesSecurity.ip=127\.0\.0\.1

# Authenticate if any handler succeeds
cas.authn.policy.any.tryAll=false

# Disable authentication with a static list of credentials
# If below line is commented then you can use default
# username/password:casuser/Mellon
cas.authn.accept.users=ram::ram,shyam::shyam

# Ticket Grant Cookie (TGC) encryption key
cas.tgc.crypto.encryption.key=<my key>
# Ticket Grant Cookie (TGC) Signing key
cas.tgc.crypto.signing.key=<my key>

# Webflow encryption key
cas.webflow.crypto.encryption.key=<my key>
# Webflow signing key
cas.webflow.crypto.signing.key=<my key>

# Embedded Tomcat settings
server.servlet.context-path=/cas
server.port=8443
server.ssl.keyStore=file:/etc/cas/thekeystore
server.ssl.keyStorePassword=changeit
server.ssl.keyPassword=changeit

# JSON Service Registry
cas.serviceRegistry.json.location=file:/etc/cas/config/services-staging

# MongoDb Ticket registry
cas.ticket.registry.mongo.host=localhost
cas.ticket.registry.mongo.port=27017
cas.ticket.registry.mongo.userId=casDbAdmin
cas.ticket.registry.mongo.password=admin
cas.ticket.registry.mongo.databaseName=casdb
cas.ticket.registry.mongo.authenticationDatabaseName=casdb


# MongoDb Authentication
cas.authn.mongo.host=localhost
cas.authn.mongo.port=27017
cas.authn.mongo.userId=casDbAdmin
cas.authn.mongo.password=admin
cas.authn.mongo.databaseName=casdb
cas.authn.mongo.authenticationDatabaseName=casdb
cas.authn.mongo.usernameAttribute=username
cas.authn.mongo.attributes=
cas.authn.mongo.passwordAttribute=password
cas.authn.mongo.collection=accounts

# Authentication Policy
cas.authn.policy.requiredHandlerAuthenticationPolicyEnabled=true

# Default attributes.
cas.authn.attributeRepository.defaultAttributesToRelease=firstname,lastname,mail

# Spring Webflow
cas.webflow.autoconfigure=true
cas.webflow.alwaysPauseRedirect=false
cas.webflow.refresh=true
cas.webflow.redirectSameState=false

cas.webflow.session.lockTimeout=30
cas.webflow.session.compress=false
cas.webflow.session.maxConversations=5
cas.webflow.session.storage=true

Iнастроили Drupal для использования локального сервера CAS для аутентификации.Когда я пытаюсь получить доступ к Drupal, он перенаправляет меня на экран входа в CAS.После ввода учетных данных в форму входа и отправки. Это не удается и показывает мне ниже ошибку, которую я не могу выяснить.Я не очень хорош в JAVA.CAS имеет встроенный Spring Spring.Я думаю, что ошибка связана с веб-потоком.Во время процесса аутентификации в CAS есть что-то, называемое основным разрешением и разрешением атрибутов, которое решает, какой обработчик аутентификации использовать и сколько атрибутов добавить в ответ.

Ошибка:

2019-01-24 14:35:32,348 INFO [org.apereo.inspektr.audit.support.Slf4jLoggingAuditTrailManager] - <Audit trail record BEGIN
=============================================================
WHO: casuser
WHAT: TGT-5-*****b6YD2V8OBQ4X-jet
ACTION: TICKET_GRANTING_TICKET_CREATED
APPLICATION: CAS
WHEN: Thu Jan 24 14:35:32 IST 2019
CLIENT IP ADDRESS: 0:0:0:0:0:0:0:1
SERVER IP ADDRESS: 0:0:0:0:0:0:0:1
=============================================================

>
2019-01-24 14:35:32,353 ERROR [org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/cas].[dispatcherServlet]] - <Servlet.service() for servlet [dispatcherServlet] in context with path [/cas] threw exception [Request processing failed; nested exception is org.springframework.webflow.execution.ActionExecutionException: Exception thrown executing org.apereo.cas.web.flow.GenerateServiceTicketAction@147375b3 in state 'generateServiceTicket' of flow 'login' -- action execution attributes were 'map[[empty]]'] with root cause>
java.lang.NullPointerException: null

Полная трассировка стека ошибок: https://pastebin.com/vEvcvFte

Любая помощь приветствуется.Я борюсь с этой ошибкой в ​​течение нескольких дней, и я не могу понять проблему.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 26 января 2019

Вы можете рассмотреть возможность принудительного обновления вашего SNAPSHOT. Хотя в ваших журналах не отображается идентификатор фиксации, возможно, вы используете старую версию с ошибкой, которая с тех пор была исправлена. Если вы изучите файл readme проекта, вы найдете инструкции по обновлению версии снимка с помощью Gradle.

...