2

在我的 ASP.Net Core 应用程序中,我实现了 Microsoft 外部登录。我现在希望覆盖文档中列出的默认登录回调,https://localhost:5001/signin-microsoft如果当然在 localhost 和该端口上运行的话。此处的说明然后声明回调覆盖将是这样的https://contoso.azurewebsites.net/.auth/login/microsoftaccount/callback

我对回调的实现位置有点困惑。目前,我ExternalLoginCallback()在基本 Controller 类中实现了回调方法。但是从上面的例子来看,它看起来不应该是控制器的一部分。

回调应该在内部Startup.cs、控制器或我目前不知道的其他文件中吗?

4

1 回答 1

3

此处的说明然后指出回调覆盖将是这样的:https://contoso.azurewebsites.net/.auth/login/microsoftaccount/callback

这与Azure App 服务中的内置身份验证和授权支持有关。您是否在 Azure App 服务中托管您的应用程序?

如果是 :

如果您启用了Authentication and authorization应用服务的功能,则意味着您使用的是 Azure 中内置的身份验证和授权支持。该功能将接管您的应用程序的身份验证和授权,这意味着即使您删除应用程序中的外部 Azure AD 身份验证代码,身份验证和授权仍然有效。然后你可以:

  1. 使用Authentication and authorization应用服务功能,删除Owin微软账号认证中间件相关代码。

  2. 禁用Authentication and authorization应用服务功能,使用微软账户外部登录(Microsoft.AspNetCore.Authentication.MicrosoftAccount 包)。

如果不 :

然后你应该遵循文档:Microsoft Account external login。您可以通过以下方式配置回调 url:

microsoftOptions.CallbackPath = "/home/about";

但是,如果您使用带有 Microsoft 帐户外部登录的 ASP.NET 标识模板。Microsoft 认证后,asp.net 将检查用户的身份是否存在于数据库中。由于 ASP.NET Core 2.1 及更高版本提供 ASP.NET Core Identity 作为 Razor 类库。如果您想在身份验证后将用户重定向到另一个页面,您可以:

  1. ASP.NET Core 项目中的脚手架标识:https ://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-2.2&tabs=visual-studio

  2. 之后,修改重定向网址Areas.Identity.Pages.Account.Login.cshtml.cs

    public 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);
    }
    
于 2018-12-27T07:51:54.587 回答