如何在Drupal与.NET MVC之间实现OpenID认证,MVC作为身份提供方
实现.NET MVC作为IDP、Drupal作为SP的OpenID认证集成方案
步骤1:配置.NET MVC 为OpenID Connect Identity Provider
- 首先在你的.NET MVC项目中引入OpenID Connect服务端组件,.NET Framework版本可以使用
IdentityServer3,.NET Core/.NET 5+版本可以使用IdentityServer4或者Duende IdentityServer。 - 在IdentityServer配置中心新增对应Drupal站点的客户端条目,核心配置参数如下:
- 客户端ID(Client ID):设置唯一自定义字符串,后续Drupal配置需要复用该值
- 客户端密钥(Client Secret):生成高复杂度随机字符串,留存备用
- 重定向URI:填写
https://你的Drupal域名/openid-connect/<客户端标识>/callback,路径规则和你使用的Drupal OpenID模块要求保持一致 - 允许的授权类型:仅开启
authorization_code模式即可 - 允许的Scopes:至少开放
openid、profile、email三个基础权限
- 配置用户信息端点返回规则,确保可以输出Drupal需要的用户字段(用户名、邮箱、昵称等)
- 本地验证IDP配置有效性:访问
https://你的MVC IDP域名/.well-known/openid-configuration,确认可以正常返回OpenID标准配置元数据。
步骤2:配置Drupal 为OpenID Connect Service Provider
- 在Drupal站点安装通用OpenID Connect客户端模块,比如官方的
OpenID Connect模块,支持自定义第三方OpenID提供商。 - 进入Drupal后台OpenID Connect配置界面,新增自定义OpenID提供商,填写.NET MVC IDP的相关参数:
- 提供商名称:自定义即可,比如
.NET MVC 统一认证 - 客户端ID:填写之前在.NET MVC IDP中配置的Client ID
- 客户端密钥:填写之前生成的Client Secret
- 授权端点:填写IDP的授权接口地址,通常为
https://你的MVC IDP域名/connect/authorize - Token端点:填写
https://你的MVC IDP域名/connect/token - 用户信息端点:填写
https://你的MVC IDP域名/connect/userinfo - 公钥端点(可选):需要做JWT签名验证时填写
https://你的MVC IDP域名/.well-known/openid-configuration/jwks
- 提供商名称:自定义即可,比如
- 配置用户字段映射规则:将IDP返回的用户字段(比如
sub、email、name)和Drupal本地用户字段一一对应,确保认证通过后可以自动匹配或创建Drupal本地用户。 - 配置登录入口:按需设置是否在Drupal登录页显示该IDP的登录按钮,或者强制所有用户走该IDP认证。
步骤3:测试与问题排查
- 测试前先开启两边的调试日志,.NET端开启IdentityServer的Debug日志,Drupal端开启OpenID Connect模块的日志记录,方便排查问题。
- 正常认证流程:点击Drupal登录页的第三方登录按钮,跳转到.NET MVC IDP的登录页,输入账号密码完成登录并同意授权后,会自动跳转回Drupal站点完成登录。
- 常见问题排查方向:
- 重定向URI不匹配:确认两边配置的重定向URI完全一致,包括http/https协议、域名、路径、尾斜杠都不能有差异
- Scope不匹配:确认Drupal请求的scope已经在IDP端开放给对应客户端
- 用户字段缺失:确认IDP的用户信息端点返回了Drupal映射规则中需要的所有字段
- 签名验证失败:确认Drupal端配置了正确的IDP公钥,生产环境不要关闭JWT签名校验
生产环境部署必须全程使用HTTPS协议,禁止公网传输明文认证信息,客户端密钥需要定期更换。
内容的提问来源于stack exchange,提问作者Naseer ahmad
相关产品推荐
相关产品推荐

