在我的ASP.Net Core应用程序中,我实现了Microsoft外部登录。我现在希望覆盖默认的登录回调,文档中列出的默认登录回调为https://localhost:5001/signin-microsoft
,如果它当然在本地主机和该端口上运行的话。这里的说明说明回调覆盖如下:https://contoso.azurewebsites.net/.auth/login/microsoftaccount/callback
。
我对回调应该在哪里实现有点困惑。目前,我已经在Controller基类中实现了ExternalLoginCallback()
回调方法。但从上面的例子来看,它看起来不应该是控制器的一部分。
回调应该在Startup.cs
、控制器或我目前不知道的其他文件中吗?
此处的说明说明指出回调覆盖如下:https://contoso.azurewebsites.net/.auth/login/microsoftaccount/callback.
这与Azure应用程序服务中的内置身份验证和授权支持有关。你是否在Azure应用程序服务中托管你的应用程序?
如果是:
如果您启用应用程序服务的Authentication and authorization
功能,则意味着您正在使用Azure中内置的身份验证和授权支持。该功能将接管你的应用程序的身份验证和授权,这意味着即使你删除了应用程序中的外部Azure AD身份验证代码,身份验证和权限仍然有效。然后你可以:
-
使用应用程序服务的
Authentication and authorization
功能,删除Owin Microsoft帐户验证中间件相关代码。 -
禁用应用程序服务的
Authentication and authorization
功能,使用Microsoft帐户外部登录(Microsoft.AspNetCore.Authentication.MicrosoftAccount包)。
如果否:
然后您应该遵循文档:Microsoft帐户外部登录。您可以通过以下方式配置回调url:
microsoftOptions.CallbackPath = "/home/about";
但是,如果您将ASP.NET标识模板与Microsoft帐户外部登录一起使用。经过Microsoft身份验证后,asp.net将检查数据库中是否存在用户身份。由于ASP.NET Core 2.1及更高版本提供了作为Razor类库的ASP.NET Core Identity。如果您想在身份验证后将用户重定向到另一个页面,您可以:
ASP.NET核心项目中的脚手架标识:https://learn.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-2.2&tabs=visual studio
之后,在
Areas.Identity.Pages.Account.Login.cshtml.cs
:中修改重定向urlpublic IActionResult OnPost(string provider, string returnUrl = null) { returnUrl = "/home/contact"; // Request a redirect to the external login provider. var redirectUrl = Url.Page("./ExternalLogin", pageHandler: "Callback", values: new { returnUrl }); var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl); return new ChallengeResult(provider, properties); }