CAS 6.6.8配置OIDC对接测试应用遭授权拒绝问题求助
CAS 6.6.8 OIDC授权被拒问题排查
背景
初次接触CAS 6.6.8,熟悉Okta、Auth0等OIDC平台,但不了解CAS配置。当前CAS已集成AD登录,点击Node.js测试应用的登录按钮后,跳转至CAS的OIDC授权URL,但直接进入“Authorization Denied”页面,未触发AD认证流程,需排查解决。
相关配置信息
CAS服务器OIDC模块配置
# Server server.port=443 # SSL server.ssl.enabled=true server.ssl.key-store=file:{path} server.ssl.key-store-password=xxx server.ssl.key-password=xxx # CAS cas.server.name=https://URL:443 cas.server.prefix=${cas.server.name}/cas cas.logout.followServiceRedirects=true cas.authn.accept.enabled=false # Active Directory cas.authn.ldap[0].type=AUTHENTICATED cas.authn.ldap[0].ldapUrl=ldap://localhost:389 cas.authn.ldap[0].useStartTls=false cas.authn.ldap[0].baseDn=DC=AAA,DC=BBB cas.authn.ldap[0].search-filter=(sAMAccountName={user}) cas.authn.ldap[0].subtreeSearch=true cas.authn.ldap[0].bindDn=USER cas.authn.ldap[0].bindCredential=XXX # OIDC settings cas.authn.oidc.core.issuer=https://URL/cas/oidc cas.authn.oidc.core.skew=5 cas.authn.oidc.jwks.file-system.jwks-file=file:C:\Program Files\Tomcat 9.0\etc\cas\config\keystore.jwks # Encryption/Signing keys cas.tgc.crypto.encryption.key=SN7Vpa8oHvXfh2hDZp8ANxZGRkF1DvKbYLTy_Vip2dI cas.tgc.crypto.signing.key=KwbtZl2y5sidXFMShjVm4PiGwjVQ0Fq-ZBp0A_HUK6IOnoS2h0E5cSfp7vy8uioqX04yKIBXcU0kUm6DRuPCZQ cas.webflow.crypto.signing.key=MltIqyj_vGFgZKFfw8vmoqYIYYu_KEU20AyZaAIDZl_Xjhl0ZGpPNe4h4N7-8p1_pNi-s97TQKb1-INp9VEwEA cas.webflow.crypto.encryption.key=3Mh_pdDFLPCMgacDL6z8SQ
注册服务配置(/etc/config/services)
{ "@class": "org.apereo.cas.services.OidcRegisteredService", "serviceId": "https://localhost:3000/callback", // 我的应用回调URL "name": "OIDC", "id": 1, "clientId": "41ff9715-bd3e-473c-9888-e2d5a1364c2a", "clientSecret": "SECRET", "bypassApprovalPrompt": true, "generateRefreshToken": true, "evaluationOrder": 10000 }
Node.js测试应用配置
{ "domain": "URL/cas/oidc", "clientId": "41ff9715-bd3e-473c-9888-e2d5a1364c2a", }
跳转的授权URL
https://URL/cas/oidc/authorize?client_id=41ff9715-bd3e-473c-9888-e2d5a1364c2a&acr=http%3A%2F%2Fschemas.openid.net%2Fpape%2Fpolicies%2F2007%2F06%2Fmulti-factor&scope=openid%20profile%20email%20read%3Aall&response_type=code&response_mode=query&state=dGEwS21Ddm52WUNXc254c2ptRmNzQjBOZGNTSGlPZzZ1R1AxVldOTl9lMA%3D%3D&nonce=RUIzY1hEbWJmWDZJYjNWOWh3QVJZcjBBdVNDOGt0RVdjYVl6WEZ1R0tXYQ%3D%3D&redirect_uri=http%3A%2F%2Flocalhost%3A3000&code_challenge=2Mln96FLN8s0qylEMY9yuC7ucbKioF9cGMIYG5B4q8s&code_challenge_method=S256&auth0Client=eyJuYW1lIjoiYXV0aDAtc3BhLWpzIiwidmVyc2lvbiI6IjEuMTkuNCJ9
排查与解决方案
1. 回调URL不匹配
注册服务中配置的serviceId是https://localhost:3000/callback,但授权请求里的redirect_uri是http://localhost:3000,两者完全不匹配。CAS会严格校验回调URL,不匹配直接拒绝授权。
- 修正:将注册服务的
serviceId改为http://localhost:3000,或者调整测试应用的redirect_uri为https://localhost:3000/callback,确保两者一致。
2. ACR要求未满足
授权请求中携带了acr=http://schemas.openid.net/pape/policies/2007/06/multi-factor,但当前CAS仅配置了AD单因素认证,没有启用多因素认证模块。CAS无法满足该ACR要求,直接拒绝授权。
- 修正:
- 从测试应用的授权请求中移除
acr参数; - 或在CAS中启用多因素认证模块,并配置对应ACR的认证策略。
- 从测试应用的授权请求中移除
3. 自定义权限范围未配置
授权请求中的scope包含read:all,但注册服务未显式允许该自定义范围。CAS默认仅支持标准OIDC范围(openid、profile、email等),自定义范围需手动配置。
- 修正:在注册服务配置中添加
scopes字段:
"scopes": ["openid", "profile", "email", "read:all"]
4. HTTP/HTTPS协议不一致
注册服务的serviceId使用HTTPS,但测试应用的redirect_uri使用HTTP,CAS可能因协议不一致拒绝请求。
- 修正:若测试应用为本地开发用HTTP,将注册服务的
serviceId改为http://localhost:3000;或给测试应用配置HTTPS证书,统一协议。
5. 查看CAS日志定位细节
检查CAS服务器的日志文件(通常路径为logs/cas.log),查找“Authorization Denied”相关的详细错误信息,可精准定位具体校验失败环节。
内容的提问来源于stack exchange,提问作者JeremP
相关产品推荐
相关产品推荐

