Asp.net mvc ASP.NET核心Web API和Angular客户端中的外部身份验证

Asp.net mvc ASP.NET核心Web API和Angular客户端中的外部身份验证,asp.net-mvc,facebook,asp.net-core-2.0,google-authentication,asp.net-core-webapi,Asp.net Mvc,Facebook,Asp.net Core 2.0,Google Authentication,Asp.net Core Webapi,我有一个angular应用程序,它使用asp.net核心Web API。我需要为google和facebook登录添加外部身份验证,以便我的web和移动应用程序可以使用此web api对用户进行身份验证。我已经阅读了为此提供的文档和教程 喜欢 及 但是他们都没有帮助我,因为我的web应用程序在Angular 5上 我真正的问题是如何获取将我重定向到Google或facebook登录页面的URL 大多数情况下,它们都使用Asp.net mvc应用程序,其中有一个控制器:AccountControl

我有一个angular应用程序,它使用asp.net核心Web API。我需要为google和facebook登录添加外部身份验证,以便我的web和移动应用程序可以使用此web api对用户进行身份验证。我已经阅读了为此提供的文档和教程 喜欢 及 但是他们都没有帮助我,因为我的web应用程序在Angular 5上

我真正的问题是如何获取将我重定向到Google或facebook登录页面的URL

大多数情况下,它们都使用Asp.net mvc应用程序,其中有一个控制器:AccountController和方法ExternalLogins

GET /api/Account/ExternalLogins?returnUrl=%2F&generateState=true
他们说响应将是一个json,如下所示:

   [{"name":"Facebook",
  "url":"/api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A15359%2F&state=QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1",
  "state":"QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1"}]
这个JSON正是我需要的,因为我需要这样的URL来打开facebook或google登录页面。上面的链接使用了框架式项目和已经编写的所有代码,这些代码非常适合Asp.net web应用程序。但在我的例子中,我从头开始使用web api,我的web应用程序是Angular 5。另外,如果我尝试了一个scafoldedwebapi项目,但找不到任何名为AccountController的控制器,也找不到任何名为ExternalLogins的方法来获取包含提供者名称和登录页面url的JSON。在.NETCore2中,它的工作方式似乎有所改变。 上面的第一个链接显示了在Asp.net core 1和Asp.net core 2的启动类文件中包含GoogleAuthentication的两种方法。所以一定有什么我错过了

我正在使用Asp.NETCore2。 我已经得到了Api密钥和机密,并添加到启动类文件中

我希望我足够清楚

如果我需要详细说明,请告诉我


请帮忙。谢谢。

您需要在API中的一个控制器中为Google身份验证创建挑战,并从angular应用程序重定向到该API控制器

控制器方法

    [HttpGet("ExternalLogin")]
    public IActionResult ExternalLogin(string provider)
    {
        if (provider == null)
        {
            return null;
        }

        var properties = new AuthenticationProperties { RedirectUri = "www.mydomain.com/api/auth/callback" };
        var response = Challenge(properties, provider);
        return response;
    }
单击google登录按钮时调用的组件方法

externalLogin(provider:string){
this.document.location.href = this.baseAPIUrl + 'auth/externallogin?provider='+provider;
}