我有一个使用asp.net核心Web API的角度应用程序。我需要为google和facebook登录添加外部身份验证,以便我的网站和移动应用程序可以使用此网络API验证用户身份。我已经完成了为此提供的文档和教程 喜欢 this one和also 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密钥和秘密,并添加到启动类文件中。
我希望我足够清楚。
请告诉我是否需要详细说明。
请帮忙。感谢。
答案 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;
}