添加 Azure AD 连接服务会覆盖 AAD 门户中的重定向 URI

问题描述

我已在 Azure AD (aad.portal.azure.com) 中注册一个应用程序。

Azure AD portal

我想使用此应用程序注册进行身份验证,使用 OpenIDConnect 对具有不同主机名的多个 web 应用程序进行身份验证。我可以在门户中配置多个重定向 URI。

当我在 Visual Studio 2019 中创建新项目并使用添加连接的服务向导时,它会要求我指定是否创建新的 Azure AD 应用程序(我们的 AAD 管理员不允许此选项,但我不想无论如何都要这样做),或者使用现有 AAD 应用程序中的设置。

Add connected services wizard

问题是,无论我在此处指定什么重定向 URI,当我保存连接的服务配置时,visual studio 都会将该重定向 URI 写回 AAD 门户并删除我已在那里指定的任何重定向 URI。

我不希望 Visual Studio 这样做。有没有办法抑制这种覆盖行为,也许是visual studio中的设置?否则,每次创建新的 Visual Studio 解决方案并运行向导时,我都需要重新创建之前存在的所有 URI。

如果有区别,项目类型是 .net5 current mvc。

谢谢。

解决方法

我没有找到关于这种行为的官方文档,但确实存在。

首先我们需要知道的是,虽然我们可以为多个应用程序/项目使用一个应用程序注册,但不建议这样做。因为按照最小权限原则,我们应该给不同的应用不同的权限,而不是给所有的应用所有的权限。

Visual Studio 添加连接服务功能默认应遵循这一原则:一个应用程序注册应用于一个应用程序。因此它会删除其他重定向 url 并将您指定的重定向 url 放入应用程序注册中。

有一种设置重定向url的解决方法,只需要你做一个小的手动操作。

在添加连接服务时将 重定向 URL 留空。它将使用项目的 SSL 网址(例如 https://localhost:44372/signin-oidc)作为您项目中的重定向网址,并且不会删除应用注册中的直接网址。

然后再次打开添加连接服务并根据需要修改重定向网址,例如:https://localhost:47800/signin-oidc。之后,不要忘记手动将 https://localhost:47800/signin-oidc 添加到应用注册中。

与重新创建之前存在的所有 URI 相比,它会节省更多时间。

更新:

尝试直接在 launchUrl 文件下的 launchUrlSettings.json 中进行更改。请注意,真正的直接 url 是这个 launchUrl + CallbackPath(在 appsettings.json 文件下)。因此,您还需要修改 CallbackPath。这不会更新门户。