ASP.NET Core 5 MVC集成OpenID Connect部署远程Windows服务器报403错误
问题原因及解决步骤
1. IIS身份验证规则拦截回调请求
IIS层面如果开启了除匿名身份验证外的其他验证方案(如Windows身份验证、表单身份验证),或者配置了限制访问的URL授权规则,会在ASP.NET Core中间件处理请求前直接拦截/signin-oidc回调请求,返回403错误。
解决操作:
- 打开IIS管理器,定位到部署的
myapp应用,点击「身份验证」功能 - 仅保留「匿名身份验证」为启用状态,禁用其他所有身份验证方案,将身份校验逻辑完全交给ASP.NET Core MS Identity中间件处理
- 进入「授权规则」功能,确认存在允许所有用户访问的规则,没有配置特定用户/用户组的访问限制
2. 虚拟应用路径基准未配置
你将应用部署在IIS的虚拟路径/myapp下而非站点根目录,未显式配置路径基准的情况下,OIDC中间件会默认匹配站点根目录下的/signin-oidc路径,无法识别带虚拟路径的回调请求,触发403。
解决操作:
在Startup.cs的Configure方法最开头添加路径基准配置:
app.UsePathBase("/myapp");
也可以直接修改应用发布后生成的web.config,在aspNetCore节点中增加参数配置:
<aspNetCore processPath="dotnet" arguments=".\你的应用名称.dll --pathbase=/myapp" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
3. 前向头配置缺失导致协议识别错误
用户访问的是HTTPS协议地址,但IIS转发到ASP.NET Core的请求未携带前向头的情况下,中间件会误判当前请求为HTTP协议,生成的回调地址和Azure AD中配置的HTTPS回调地址校验不通过,返回403。
解决操作:
在Startup.cs的ConfigureServices方法中添加前向头配置:
services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedFor | Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto; });
之后在Configure方法的最开头(优先级高于其他所有中间件)添加前向头中间件:
app.UseForwardedHeaders();
4. 回调地址匹配校验
再次确认Azure AD应用注册中添加的回调地址为完整路径https://myserver.mycompany.org/myapp/signin-oidc,协议、域名、虚拟路径、回调后缀均完全一致,无大小写或字符拼写错误。
内容的提问来源于stack exchange,提问作者marc_s
相关产品推荐
相关产品推荐

