AADSTS50011: 请求中指定的回复 URL 与应用程序配置的回复 URL 不匹配: '<AppId>'

38

我有一个 .NET Core 2 应用程序模板,它已经默认配置为使用 Azure AD。

具体配置如下:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "lautaroarinolive.onmicrosoft.com",
    "TenantId": "67cb2dfd-ebd5-40d8-829b-378340981a17",
    "ClientId": "50819a7a-e018-4c1d-bf0a-18c8fce5c600",
    "CallbackPath": "/signin-oidc"
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  }
}

在我的门户中,我有一个与ClientId相同ID的Azure应用程序注册。它具有回复URL [APP-URL]/signin-oidc

App registration in the Azure portal

仅当我将回复URL设置为[LocalhostURL]/signin-oidc时,本地主机应用程序才能正常工作,尽管我已经了解到该配置不应影响本地主机上的登录。

Azure应用程序在任何情况下都不起作用。

在两个应用程序中,当它无法工作时,我会收到此错误:

AADSTS50011:请求中指定的回复URL与应用程序的配置的回复URL不匹配:"50819a7a-e018-4c1d-bf0a-18c8fce5c600"

  1. 本地主机应用程序是否不需要配置回复URL?

  2. 为什么会出现“未配置回复URL”错误?


将应用程序发布到Azure Web应用程序服务后,回复URL应该只是<appURL>/signin-oidc。这是一个新的AAD应用程序吗? - Wayne Yang
谢谢!我选择了设置为单个组织的Net Core 2 MVC应用程序,带认证功能。 - Daarwin
@WayneYang-MSFT,我尝试了你给我提供的Git项目。 我在Azure门户中创建了一个新应用程序,并在AzureAD中注册了它。我相应地更改了回复URL,但为了使其正常工作,我还必须更改默认情况下错误的应用程序ID URI。所以现在它在Azure上可以工作了,耶!但是它仍然无法在我的本地主机上工作。你说过本地主机不应该使用HTTPS?但默认情况下它确实使用HTTPS,这可能是个问题吗?总的来说,当登录在Azure上工作时,在本地主机上就不起作用,反之亦然。 - Daarwin
该项目太旧了,源代码不可用。 - Daarwin
@WayneYang 这个对我很有帮助... - Shivprasad Koirala
显示剩余10条评论
10个回答

19

您可以参考这个示例来重建您的.NET Core应用程序并发布到Azure。

以下是您需要注意的一些内容:

  1. 您需要将端口从5000更改为实际有效的端口。当前,应该是61659。因此,当您在本地主机上进行测试时,可以使用http://localhost:61659/signin-oidc在AAD应用程序中设置回复URL。

  2. 如果您配置了应用程序以供生产使用或者将应用程序发布到Azure Web App,则应更改App配置文件和AAD应用程序中的回复URL为<AppURL>/signin-oidc

例如:https://www.contoso.com/signin-oidc 或者 https://Myapp.azurewebsites.net/signout-oidc


那么,无法同时为localhost和Azure Web App进行配置吗? - Daarwin
1
现在它可以工作了。无论是本地主机还是在 Azure 上都可以。我添加了两个回复 URL。在你的例子中,我添加了以下两个 URL: http://localhost:61659/signin-oidc 和 https://Myapp.azurewebsites.net/signout-oidc现在我可以在 Azure 应用程序和本地主机上都进行在线登录了。 - Daarwin
是的,您不能在回复URL中添加不同的域名,但您可以添加localhost。当您将应用程序发布到Azure时,无需在Azure中配置localhost。如果您还想使用localhost登录,只需在回复URL中添加localhost即可。 - Wayne Yang
1
嗨@whihathac,您可以在此处查看限制:https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-limitations#restrictions-on-redirect-uris - Wayne Yang
这个回答没有意义。你在回答中没有说需要改变哪个文件。我目前没有看到任何带有端口的文件。 - Darth Scitus

17

我也遇到了一个类似的问题,这是在一个.NET 4.6.1 web应用程序中。我需要像接受的答案那样在Azure中配置我的应用程序的回复URL,但是回调URL是不同的。

Select Azure Active Directory -> App Registrations -> <your app>
Select Settings -> Reply URLs

将您的应用程序URL添加上 + '/.auth/login/aad/callback' 例如: https://somesite.azurewebsites.net/.auth/login/aad/callback


1
我同意你的解决方案,'/ .auth / login / aad / callback'。 - Daleman
2
“/.auth/login/aad/callback” 是AzureAD/Microsoft登录提供程序成功登录后将重定向到的硬编码重定向路径。如果您在回复URL中没有“https://${yoursite}/.auth/login/aad/callback”,则使用Microsoft在线进行登录会抛出错误AADSTS50011。 - PotatoFarmer
https://${yoursite}/.auth/login/aad/callback添加为RedirectURI就是诀窍! - TetraDev

12

请检查您在Microsoft登录页面中的重定向URI。

redirect_uri=https://localhost:8443/login&response_type=code&scope=openid%20profile&state=7GsiHb

输入图片说明

同时确保您已将相同的URI添加到注册应用程序(Active Directory-> App Registration->您的应用程序)的重定向URI列表中。如其他答案中所述,可能需要更改支持的帐户类型为“多个组织”。

输入图片说明

输入图片说明


4
刚刚也遇到了同样的错误。我的应用是一个在 Linux docker 容器中运行的 .NET 5 ASP.NET Core 应用程序,在 Web 应用程序中运行。使用 Fiddler 进行故障排除后发现,在调用 login.microsoft.com 时,redirect_uri 查询字符串变量的值以 "http://" 开头,而不是像我期望的那样以 "https://" 开头,尽管我尝试强制对 Web 应用程序本身进行 TLS-only 设置。这导致了 URL 不匹配和错误 AADSTS50011。
在 Web 应用程序上设置环境变量 ASPNETCORE_FORWARDEDHEADERS_ENABLED=true 已经解决了此问题。Microsoft 在此文档中进行了记录:https://devblogs.microsoft.com/aspnet/forwarded-headers-middleware-updates-in-net-core-3-0-preview-6/

这是我问题的完美答案。谢谢你! - undefined

1

这对我有用。我一直在寻找错误并按照其他步骤进行操作,但这一步帮了我。谢谢。 - M Stoerzel

1

请确保services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);身份验证配置下方。

services.AddAuthentication(options =>
{
    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
    options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddOpenIdConnect(options =>
{
    options.Authority = "";
    options.ClientId = "";
    options.ResponseType = OpenIdConnectResponseType.IdToken;
    options.CallbackPath = "";
    options.SignedOutRedirectUri = "";
    options.TokenValidationParameters.NameClaimType = "name";
})
.AddCookie();

由于在AddAuthentication()扩展方法之前添加了AddMvc(),我遇到了相同的错误。

0

虽然是小事,但在Web租户中,在自定义域设置中,根据网站使用的URL,应该打开HTTPS Only选项。我曾经遇到过同样的问题,因为在登录时,redirect_uri=http://sitename被连接起来而不是https。启用此选项解决了我的身份验证问题。


这个选项在哪里?是在Azure门户中吗? - MrEs
是的。在Web租户中,设置/自定义域HTTPS只能设置可以处理此问题。 - Ádám Géczi

0

如果您从AAD登录,则应使用app-base-url/sigin-aad。


0
我的唯一解决方案:在Azure门户网站https://portal.azure.com中,导航到“应用程序注册”->选择您的应用程序->左侧边栏菜单中的“身份验证”->“移动和桌面应用程序”重定向URI->点击“添加URI”->输入以下内容。

ms-appx-web://microsoft.aad.brokerplugin/{Your_Application's_Client_ID}

示例:ms-appx-web://microsoft.aad.brokerplugin/5r3257qe-7jci-3501-38k0-3791h90542m7


0

如果您使用React-Native,请查看Web门户:https://portal.azure.com/

iOS:{YOUR_BUNDLE_IDENTIFIER}://{YOUR_BUNDLE_IDENTIFIER}/ios/callback

Android:{YOUR_APP_PACKAGE_NAME}://{YOUR_APP_PACKAGE_NAME}/android/callback

请参考下面的图片。

输入图像描述


您的图像未显示。 - SendETHToThisAddress

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接