ASP.NET核心Web API和Angular Client中的外部身份验证

时间:2018-01-05 16:19:53

标签: asp.net-mvc facebook asp.net-core-2.0 google-authentication asp.net-core-webapi

我有一个使用asp.net核心Web API的角度应用程序。我需要为google和facebook登录添加外部身份验证,以便我的网站和移动应用程序可以使用此网络API验证用户身份。我已经完成了为此提供的文档和教程 喜欢 this onealso this  但他们都没有帮助我,因为我的网络应用程序是在Angular 5上。

我的实际问题是如何获取将我重定向到Google或Facebook登录页面的网址。

大多数都使用scafolded Asp.net mvc应用程序,其中有一个控制器:AccountController with Methods 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.此外,如果我尝试了一个scafolded web api项目,但我找不到任何名为AccountController的控制器,也没有任何名为ExternalLogins的方法来获取JSON包含提供者名称和登录页面URL。它看起来像是在.net core 2中改变它的方式。 上面的第一个链接显示了在Asp.net核心1和Asp.net Core 2的启动类文件中包含GoogleAuthentication的两种方法。所以必须有一些我缺少的东西。

我使用的是Asp.net核心2。 我已经获得了Api密钥和秘密,并添加到启动类文件中。

我希望我足够清楚。

请告诉我是否需要详细说明。

请帮忙。感谢。

1 个答案:

答案 0 :(得分:0)

您需要在API的一个Controller中创建Google身份验证质询,然后从angular应用重定向到该API Controller。

控制器方法

    [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;
}