能否不修改非兼容OAuth2授权服务器,使用mod_auth_openidc集成遗留PHP应用?
解决mod_auth_openidc适配纯OAuth2授权服务器的问题
针对你的场景,不需要修改授权服务器,只需调整mod_auth_openidc的配置,让它以纯OAuth2客户端模式工作,跳过OpenID Connect特有的id_token和openid scope检查,具体方案如下:
关键配置调整
在现有配置基础上,添加/修改以下参数:
添加令牌端点配置
授权码流程需要用code交换access token,必须指定授权服务器的令牌端点:OIDCProviderTokenEndpoint https://myauthserver/oauth/token启用纯OAuth2模式
通过OIDCUseNonOpenIDConnect参数禁用OpenID Connect的强制检查,让模块仅处理OAuth2流程:OIDCUseNonOpenIDConnect On确保scope不包含openid
你的现有配置OIDCScope "all"已经符合要求,模块启用纯OAuth2模式后,不会自动向scope中追加openid,避免触发授权服务器的不支持错误。
修改后的完整配置
OIDCProviderJwksUri https://myauthserver/.well-known/jwks.json OIDCProviderAuthorizationEndpoint https://myauthserver/oauth/authorize OIDCProviderTokenEndpoint https://myauthserver/oauth/token OIDCClientID myclientId OIDCClientSecret 12345 OIDCScope "all" OIDCResponseType "code" OIDCRedirectURI /protected OIDCCryptoPassphrase SOMEPASSPHRASE OIDCUseNonOpenIDConnect On
效果说明
- 配置生效后,mod_auth_openidc会跳过对id_token的校验,也不再要求授权服务器支持
openidscope - 回调时模块会自动用拿到的authorization code交换access token,你可以在PHP应用中通过环境变量
$_SERVER['OIDC_access_token']获取到该令牌,后续自行处理认证逻辑 - 如果需要获取用户信息,可额外添加
OIDCProviderUserInfoEndpoint配置授权服务器的用户信息端点,模块会自动拉取用户信息并存入环境变量
内容的提问来源于stack exchange,提问作者marcellorvalle
相关产品推荐
相关产品推荐

