You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现ASP.net Web应用与Drupal之间基于OpenID的SSO集成

基于OpenID协议实现ASP.NET Web应用与Drupal站点SSO的实现方案

默认方案以Drupal作为OpenID服务端(OP)、ASP.NET应用作为依赖方(RP)为例,可根据自身用户池归属调整两端角色

整体实现步骤

第一步:Drupal端(OP端)配置

  • 安装启用Drupal对应的OpenID Provider模块,Drupal 9/10推荐使用OpenID Connect / OAuth2 server模块,安装完成后进入后台配置页
  • 新建OpenID Connect客户端,填写ASP.NET应用的回调地址,默认格式为https://你的ASP.NET域名/signin-oidc(为ASP.NET OpenID中间件默认回调路径,可自定义调整)
  • 配置客户端授权类型,勾选authorization_code模式,为服务端应用最安全的授权方式
  • 记录生成的客户端ID(Client ID)、客户端密钥(Client Secret)、Drupal端OpenID发现地址(默认路径为https://你的Drupal域名/.well-known/openid-configuration),用于后续ASP.NET端配置
  • 配置可返回的用户声明字段,包含用户ID、邮箱、用户名等ASP.NET端需要获取的字段,放开对应读取权限

第二步:ASP.NET端(RP端)配置

  • 安装对应NuGet包:.NET Framework环境使用Microsoft.Owin.Security.OpenIdConnect,.NET Core/.NET 5+环境使用Microsoft.AspNetCore.Authentication.OpenIdConnect
  • 配置身份验证中间件,.NET 6+环境Program.cs参考配置如下:
builder.Services.AddAuthentication(options =>
{
    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options =>
{
    options.Authority = "https://你的Drupal域名";
    options.ClientId = "Drupal端生成的客户端ID";
    options.ClientSecret = "Drupal端生成的客户端密钥";
    options.ResponseType = "code";
    options.SaveTokens = true;
    // 配置需要获取的用户声明范围
    options.Scope.Add("openid");
    options.Scope.Add("email");
    options.Scope.Add("profile");
    // 声明映射,将Drupal返回字段对应到ASP.NET内置Claims
    options.MapInboundClaims = true;
    options.TokenValidationParameters.NameClaimType = "name";
    options.TokenValidationParameters.RoleClaimType = "roles";
});
  • 启用身份验证中间件,确保在路由注册之后、授权配置之前调用app.UseAuthentication();app.UseAuthorization();
  • 给需要登录验证的接口/页面添加[Authorize]特性,用户访问未授权资源时会自动跳转至Drupal登录页

核心注意事项

  • 两个站点必须全部启用HTTPS协议,OpenID协议强制要求HTTPS避免令牌泄露,本地开发可使用自签名证书,生产环境必须使用受信任的SSL证书
  • 回调地址必须和Drupal端配置完全一致,包含协议、域名、端口、路径,大小写敏感环境需统一大小写
  • 客户端密钥需妥善保管,禁止硬编码在代码中,生产环境需使用密钥管理服务、环境变量或配置中心存储,禁止提交至代码仓库
  • 合理配置令牌过期时间,建议Access Token过期时间设为15-30分钟,Refresh Token可根据业务需求设置有效期,ASP.NET端需实现令牌自动刷新逻辑
  • 双向同步登出逻辑:用户退出时需同时清理两个站点的会话,可在Drupal端配置登出回调地址,ASP.NET端收到登出请求后清空本地Cookie
  • 做好返回字段校验,不要完全信任OP端返回的所有数据,敏感操作需二次校验用户身份
  • 若使用传统ASP.NET Web Forms应用,需通过OWIN中间件集成OpenID,不可直接使用ASP.NET Core类库
  • 提前处理跨域问题,Drupal端需放开ASP.NET域名的跨域请求权限,避免获取用户信息时报CORS错误

内容的提问来源于stack exchange,提问作者Naseer Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:45:02