OpenIddict:部署到Cloud Run后如何将openid-configuration端点改为HTTPS?
解决Cloud Run上OpenIddict认证服务器端点HTTP转HTTPS的问题
Cloud Run的流量模型是外部HTTPS请求先到Google的负载均衡,再以HTTP转发到容器实例,所以需要让.NET Core应用识别转发的协议头,同时配置OpenIddict适配这个环境。
步骤1:配置.NET Core信任反向代理头
在Program.cs中添加转发头配置,让应用识别Cloud Run传递的X-Forwarded-Proto头(标记实际请求协议为HTTPS):
builder.Services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; // 生产环境建议替换为Cloud Run官方公布的代理IP段,避免安全风险 options.AllowUnknownNetworks = true; }); // 注意:必须在UseRouting之前调用UseForwardedHeaders app.UseForwardedHeaders();
步骤2:配置OpenIddict使用转发头
在OpenIddict服务器配置中启用转发头支持,让它基于实际请求协议生成HTTPS端点:
builder.Services.AddOpenIddict() .AddServer(options => { // 配置你的认证端点 options.SetAuthorizationEndpointUris("/connect/authorize") .SetTokenEndpointUris("/connect/token") .SetUserinfoEndpointUris("/connect/userinfo"); // 启用转发头支持,确保生成的端点URL是HTTPS options.UseForwardedHeaders(); });
步骤3:验证客户端回调地址
确保所有OpenIddict客户端配置的RedirectUri和PostLogoutRedirectUri都是HTTPS格式,比如https://your-service.run.app/callback。
步骤4:检查Cloud Run服务设置
- Cloud Run默认提供的
*.run.app域名自带HTTPS证书,无需额外配置SSL证书。 - 确认服务的Ingress设置为「All」(允许外部访问),此时外部请求只能通过HTTPS访问你的服务。
内容的提问来源于stack exchange,提问作者Vũ Hoàng
相关产品推荐
相关产品推荐

