我已将测试.NET Web Api升级为Azure应用程序服务,并在Azure Active Directory下包含应用程序注册。然后我去了本地进行一些测试,发现Azure想在登录后使用应用注册中的回复URL。应用程序注册中的回复URL是应用程序服务的URL。我的本地实例将类似于https://localhost:44377/。在初始部署到Azure后,您应该如何在本地测试更改?我所能想到的就是创建另一个应用程序注册进行测试,使用我的本地主机回复URL,然后更新我的web.config以指向该开发应用程序注册。然后在再次发布之前,将web.config更新回其他应用程序注册。
以下是我用于身份验证的代码,该代码基于简单MVC项目中的标准模板。应用程序注册值正在用于重定向URL但是我可能会在测试时覆盖下面的值吗?
public class AccountController : Controller
{
public void SignIn()
{
// Send an OpenID Connect sign-in request.
if (!Request.IsAuthenticated)
{
HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}
答案 0 :(得分:1)
您可以通过指定要在身份验证请求中使用的网址来拥有多个回复网址。在Startup.cs中配置身份验证时,您可以这样做。您需要将RedirectUri添加到OpenIdConnectAuthenticationOptions.Notifications.RedirectToIdentityProvider
var openIdOptions = new OpenIdConnectAuthenticationOptions
{
//...
Notifications = new OpenIdConnectAuthenticationNotifications
{
RedirectToIdentityProvider = (context) =>
{
context.ProtocolMessage.RedirectUri = "<current reply uri>";
return Task.FromResult(0);
}
}
// ...
};
该回复uri可以从您的web.config中提取,也可以使用context.Request
动态生成。
如果要在投入生产后使用其他AD应用程序,可以使用两个应用程序并将客户端ID和密码放在web.config中。
答案 1 :(得分:1)
如果要在本地进行测试,只需将localhost添加为回复URL,并确保web.config还列出localhost。
如果您尚未这样做,请参阅此存储库:https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect