.NET Core 2.2生产环境Azure回复URL不匹配AADSTS50011错误求助
我之前碰到过一模一样的情况——明明配置了正确的重定向URI,登录时还是跳这个错误,多半是一些容易忽略的细节在搞鬼,给你几个针对性的排查方向:
1. 死磕重定向URI的大小写与结尾斜杠
Azure AD对重定向URI是严格区分大小写且完全匹配的,哪怕是一个字母大小写不对、多了/少了结尾斜杠都会触发报错。比如你配置的是https://myapplication.azurewebsites.net/auth/sign-in,但实际请求的可能是https://myapplication.azurewebsites.net/Auth/Sign-In或者带结尾斜杠的https://myapplication.azurewebsites.net/auth/sign-in/。
- 先打开浏览器开发者工具(F12)切到Network标签,触发登录动作,找到请求
https://login.microsoftonline.com/.../oauth2/v2.0/authorize的参数,查看redirect_uri的实际值,再和应用注册里的配置完全对齐。 - 可以临时在应用注册里把两种格式的URI(带/不带结尾斜杠、大小写变体)都加上测试,确认问题后再保留正确的那个。
2. 修正appsettings.json里的Domain配置
注意到你把Domain设成了应用的URL:"Domain": "https://myapplication.azurewebsites.net",这大概率是问题核心!在ASP.NET Core的Azure AD集成逻辑里,Domain字段应该填你的Azure AD租户域名(比如yourtenant.onmicrosoft.com或者你的自定义租户域名),而不是应用的部署地址。
正确的配置示例应该是这样:
"AzureAd": { "Instance": "https://login.microsoftonline.com/", "Domain": "yourtenant.onmicrosoft.com", "TenantId": "your-production-tenant-id", "ClientId": "your-production-client-id", "CallbackPath": "/auth/sign-in" }
框架会自动结合应用当前的主机名和CallbackPath生成正确的回复URL,硬把Domain设成应用地址会导致生成的redirect_uri不符合预期。
3. 检查Azure App Service的应用设置是否覆盖了本地配置
应用发布到Azure后,门户里配置 > 应用程序设置的键值对会直接覆盖appsettings.json的内容。很可能你本地配置是对的,但Azure里的AzureAd:Domain或者AzureAd:CallbackPath还停留在测试环境的旧值。
- 登录Azure门户找到你的App Service,进入配置页面,逐个检查所有AzureAd前缀的配置项,确保和生产环境的预期完全一致。
- 如果发现错误配置,直接修改保存,App Service会自动重启生效。
4. 清空浏览器缓存与旧会话
有时候浏览器缓存的旧登录会话会携带错误的redirect_uri参数,哪怕你修正了配置还是会报错。可以试试:
- 用隐身/隐私窗口打开生产环境应用,重新测试登录流程。
- 清除浏览器中与
login.microsoftonline.com和你的应用域名相关的Cookie。
5. 再确认应用注册与App Service的关联
虽然你说已经关联,但还是可以快速核对:
- 检查生产环境应用注册的
ClientId是否和App Service配置里的AzureAd:ClientId完全一致(复制粘贴时容易多空格或者少字符)。 - 确认应用注册的重定向URI没有隐藏的特殊字符,比如不可见的空格。
内容的提问来源于stack exchange,提问作者Kharenis

