背景故事
我有一个现有的 ASP.NET MVC5 应用程序,我正在连接它以使用 oauth2/Azure AD 身份验证。实际上我已经在多个环境中工作了(dev/qa/prod/localhost)。
在 Azure 中,我有一个具有多个返回 URI 的应用程序注册,示例:
我的部署管道设置了一个配置变量来更改 oauth 代码的 ReturnURI,并且一切正常。
以下是代码的设置方式。我的内部控制器有一个 Authorize 属性,当用户未经身份验证时,会将其重定向到/Account/Index进行 oauth 质询的位置。以下是我提出 oauth 挑战的方法:
HttpContext.GetOwinContext().Authentication.Challenge(
new AuthenticationProperties
{
RedirectUri = Url.Action("ValidateOAuth", "Account", new { returnUrl })
},
OpenIdConnectAuthenticationDefaults.AuthenticationType);
Run Code Online (Sandbox Code Playgroud)
用户将被重定向到 Microsoft 进行登录,然后返回到/Account/ValidateOAuth. 在该操作中,我检查Request.IsAuthenticated,如果是真的,我会构建一个本地会话变量来获取有关用户的额外信息,并将它们推送到内部页面。
问题
我在特定场景中遇到了问题。在我的 QA 环境中,我托管了两个网站副本。一个位于基本 URI ( https://mywebsite.qa.com),另一个作为 IIS 中的子应用程序位于https://mywebsite.qa.com/staging。这样我们的测试人员就可以将分支部署到 /staging 站点并测试它们,而不会干扰我们通常的 QA 用户。
当用户访问临时站点时,他们会被重定向到我的/staging/Account/Index操作,而质询会将他们重定向到 Azure AD 登录站点。在那里,一旦他们进行了身份验证,他们就会被重定向回我的网站。然而,它们没有按/staging/Account/ValidateOAuth预期重定向。相反,它们被重定向到/. …
authentication asp.net-mvc oauth-2.0 asp.net-mvc-5 azure-active-directory