配置ASP.NET Core Web应用验证ADFS JWT令牌及解决委托流问题
解决ASP.NET Core Web API验证ADFS Client Credentials令牌及On-Behalf-Of流程问题
我帮你梳理下这两个核心问题的解决方案,都是ADFS 2019下的常见配置坑:
一、修复Web API的令牌验证失败问题
你遇到的audience did not match报错,根源是ADFS在Client Credentials流程下返回的令牌,aud字段会自动带上microsoft:identityserver:前缀,而不是你在ADFS里配置的原始Web API标识符。按下面的方式调整配置即可:
1. 修正JwtBearer验证配置
更新你的AddJwtBearer代码,重点是匹配ADFS返回的完整受众值,同时让元数据自动处理Issuer验证(避免手动硬写出错):
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.Authority = "https://MY-ADFS/adfs"; // 填完整的ADFS OIDC元数据地址,格式一般是:https://你的ADFS服务器/adfs/.well-known/openid-configuration options.MetadataAddress = "https://MY-ADFS/adfs/.well-known/openid-configuration"; // 这里的Audience要和令牌里的aud完全一致,即 microsoft:identityserver:你的Web API标识符 options.Audience = "microsoft:identityserver:你的Web API标识符"; options.TokenValidationParameters = new TokenValidationParameters { // 直接指定正确的受众列表,包含带前缀的版本 ValidAudiences = new List<string> { "microsoft:identityserver:你的Web API标识符" }, // 开启Issuer验证,让Authority自动从元数据获取合法Issuer,不要手动写死 ValidateIssuer = true, ValidateAudience = true }; });
2. 确保中间件顺序正确
在Program.cs(或旧版的Startup.cs)中,必须先启用认证中间件,再启用授权中间件,否则验证逻辑不会生效:
app.UseAuthentication(); app.UseAuthorization();
二、解决On-Behalf-Of流程的客户端ID前缀问题
你调用AcquireTokenAsync时遇到的“找不到客户端ID”错误,是因为ADFS在OBO流程中只识别不带前缀的原始客户端ID,但你传递了带前缀的版本。按以下步骤调整:
1. 正确构造ClientCredential
直接使用ADFS应用组里配置的原始客户端ID(不带microsoft:identityserver:前缀)创建凭证:
// 注意:这里用你在ADFS上配置的原始客户端ID,不要加前缀 ClientCredential clientCredential = new ClientCredential("你的Web API客户端ID", "你的客户端密钥");
2. 无需修改UserAssertion的令牌内容
Web API收到的令牌aud带前缀是正常的,直接用这个令牌创建UserAssertion即可。ADFS会自动验证该令牌的合法性,只要你的Web API在ADFS应用组中被正确配置为允许委托(ActAs)访问最终资源。
3. 确认ADFS应用组的委托配置
最后检查ADFS应用组的设置:
- 确保你的Web API(作为客户端)被授予了访问最终资源的权限
- 在Web API的信任关系配置中,启用ActAs权限(允许它代表调用方获取最终资源的令牌)
几个关键提醒
- Client Credentials流程下,ADFS返回的
aud字段格式是固定的microsoft:identityserver:<资源标识符>,这是ADFS 2019的默认行为,不要尝试修改这个规则,而是在验证逻辑中适配它 - 测试时一定要用jwt.io解析Postman获取的令牌,确认
iss、aud、exp等字段是否符合预期,再针对性调整验证参数 - 元数据地址必须是完整的HTTPS URL,ADFS不会接受相对路径的元数据地址
内容的提问来源于stack exchange,提问作者Loris
相关产品推荐
相关产品推荐

