我正在使用 CAS 服务器中的委托身份验证将登录与 Instagram 集成。我已经在 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
=============================================================
如果我尝试再次尝试并使用 Instagram 登录 CAS,则会收到不同的错误:
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]]'
为了能够使用 Instagram 成功将用户登录到 CAS 服务器,我需要做更多或更改什么?
2019 年 8 月 16 日更新
通过修补其中一个模块,我能够让 PAC4J 为 Instagram 工作。我必须手动将访问令牌添加到被调用的最终配置文件 url,并将身份验证方法从 basicAuth 更改为 requestBody。
但是,现在当 Instagram 将我重定向回 CAS 服务器时,在登录后,我应该被重定向到服务 URL。相反,我被重定向到 CAS 登录成功页面,并显示以下消息:
您,tridhya123,已成功登录中央身份验证服务。但是,您看到此页面是因为 CAS 不知道您的目标目的地以及如何到达那里。再次检查身份验证请求,并确保指定了经过 CAS 授权和注册的目标服务/应用程序。
下面是显示从 Instagram 到 CAS 的登录流程的调试日志文件: