Невозможно получить общий клиент OAuth2, работающий с сервером CAS с использованием pac4j
Я работаю над интеграцией входа в Instagram с использованием делегированной аутентификации на сервере CAS. Я настроил все необходимые свойства в файле cas.properties, а также создал для него файл JSON регистрации службы. Когда я вхожу в аккаунт Instagram, меня перенаправляют обратно на страницу входа в CAS, и ничего не происходит.
Я попытался поэкспериментировать с файлом JSON реестра служб, а также с различными свойствами в cas.properties
Файл cas.properties содержит следующее
cas.authn.pac4j.oauth2[0].id={client_id}
cas.authn.pac4j.oauth2[0].secret={client_secret}
cas.authn.pac4j.oauth2[0].authUrl=https://api.instagram.com/oauth/authorize?client_id={client_id}&response_type=code&client_name=instagram
cas.authn.pac4j.oauth2[0].tokenUrl=https://api.instagram.com/oauth/access_token?grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}&client_name=instagram
cas.authn.pac4j.oauth2[0].profileUrl=https://api.instagram.com/v1
cas.authn.pac4j.oauth2[0].clientName=instagram
cas.authn.pac4j.oauth2[0].profileVerb=GET
cas.authn.pac4j.oauth2[0].profilePath=/users/self/
cas.serviceRegistry.watcherEnabled=true
cas.serviceRegistry.schedule.repeatInterval=10000
cas.serviceRegistry.schedule.startDelay=15000
cas.serviceRegistry.initFromJson=true
cas.serviceRegistry.json.location=file:/etc/cas/services/
Файл JSON службы выглядит следующим образом:
{
"@class" : "org.jasig.cas.services.RegexRegisteredService",
"serviceId" : "^https://.*.{domain}.com.*",
"name" : "eyerne",
"id" : 10002,
"description" : "This service definition authorizes the eyerne URL.",
"accessStrategy" : {
"@class" : "org.jasig.cas.services.DefaultRegisteredServiceAccessStrategy",
"enabled" : true,
"ssoEnabled" : true
},
"bypassApprovalPrompt": true,
"generateRefreshToken": true,
"proxyPolicy" : {
"@class" : "org.apereo.cas.services.RegexMatchingRegisteredServiceProxyPolicy",
"pattern" : "^https?://.*"
},
"supportedGrantTypes": [ "java.util.HashSet", [ "authorization_code", "client_credential"] ],
"supportedResponseTypes": [ "java.util.HashSet", [ "code", "token" ] ],
"attributeReleasePolicy" : {
"@class" : "org.apereo.cas.services.ReturnAllAttributeReleasePolicy"
}
}
Я не могу достичь точки, когда CAS может получить токен доступа и получить информацию о пользователе, используя URL-адрес профиля.
Вместо этого я получаю следующие ошибки:
DEBUG [org.apereo.cas.support.oauth.services.OAuth20AuthenticationServiceSelectionStrategy] - <Authentication request is not identified as an OAuth request>
=============================================================
WHO: audit:unknown
WHAT: [event=success,timestamp=Mon Aug 05 16:27:34 IST 2019,source=RankedAuthenticationProviderWebflowEventResolver]
ACTION: AUTHENTICATION_EVENT_TRIGGERED
APPLICATION: CAS
WHEN: Mon Aug 05 16:27:34 IST 2019
CLIENT IP ADDRESS: 0:0:0:0:0:0:0:1
SERVER IP ADDRESS: 0:0:0:0:0:0:0:1
=============================================================
Если я попытаюсь повторить попытку и войти в CAS с помощью Instagram, я получу другую ошибку:
CAS is unable to process this request: "500:Internal Server Error"
org.springframework.webflow.execution.ActionExecutionException: Exception thrown executing org.apereo.cas.web.flow.DelegatedClientAuthenticationAction@33ec9d9 in state 'clientAction' of flow 'login' -- action execution attributes were 'map[[empty]]'
Что мне нужно сделать или изменить, чтобы успешно войти на сервер CAS с помощью Instagram?
Обновление 16/16/2019
Я смог заставить PAC4J работать на Instagram, исправив один из его модулей. Мне пришлось вручную добавить токен доступа к окончательному URL вызываемого профиля, а также изменить метод аутентификации с basicAuth на requestBody.
Однако теперь, когда Instagram перенаправляет меня обратно на сервер CAS, после входа я должен быть перенаправлен на URL службы. Вместо этого я перенаправлен на страницу успешной регистрации CAS со следующим сообщением:
Вы, tridhya123, успешно вошли в систему Центральной службы аутентификации. Однако вы видите эту страницу, потому что CAS не знает о вашей цели и о том, как туда добраться. Еще раз проверьте запрос аутентификации и убедитесь, что указана целевая служба / приложение, авторизованное и зарегистрированное в CAS.
Ниже приведен файл журнала отладки, показывающий поток входа из Instagram в CAS: