我正在使用带有Angular 5的.NET Core 2.0。我需要有关使用此技术的工作的信息。使用Angular CLI和dotnet CLI在单个项目MVC中使用Angular作为BackEnd的前端和.NET Core是可行的吗?我做了实验并且结果很好,但是,我在.NEt中的控制器和你在前面与Angular的连接有问题。
我有这个架构:
我使用Implicit Flow进行身份验证,因此在mi SPA中我有一个登录按钮,当点击按钮时,SPA会向AuthServer请求并重定向到auth.myapp.com。在这个地方,用户输入您的凭证(用户名和密码),authserver实现逻辑,生成令牌并使用access_token重定向到我的SPA。这是OpenID的隐含流程。
首先,我在.NET中有一个名为“Login”的HttpGET控制器。该控制器接收一个字符串“returnURL”,并应在ViewModel中返回此returnURL以供Razor视图使用,但是我不使用Razor并使用Angular。这是我的第一个问题。在mi客户端SPA(admin.myapp.com)中,我有一个“登录”按钮,当我点击此按钮时,我向我的auth服务器发出请求,这个endpoit应该提取returlURL并返回Angular的Login页面。
在剃刀:
return View(vm);
这是从URL参数收到的returnURL,因为admin.myappp.com到auth.myapp.com(localhost:5000):
如何在Angular中使用?我需要返回此ViewModel(返回returnURL的信息)并在登录请求(HttpPost)中使用。我想也许更好的选择是删除Login的GET端点,并通过Angular Router执行returnURL的“捕获”,一旦你有了这个字符串,就可以在那里向端点发出请求通过POST登录以执行身份验证,然后通过.NET驱动程序使用访问令牌重定向到我的SPA。哪个是最好的选择?无论哪个是最佳选择,我的推理的最后一部分都会引发以下问题:
其次,我有一个控制器用于在MVC应用程序中登录,在域auth.myapp.com中,这个HttpPOST控制器重新获取一个包含登录信息的模型(用户名,密码和returnURl(来自ViewModel之前的)),这个从连接.NET控制器的服务Angular接收模型,如果结果为正,则应该重定向到其他外部主机中的其他SPA,例如:admin.myapp.com,用于SPA中的access_token。我用这个代码:
[HttpPost]
public async Task<IActionResult> Login (LoginInputModel model) {
if (ModelState.IsValid) {
if (_usersStore.ValidateCredentials (model.Username, model.Password)) {
var user = _usersStore.FindByUsername (model.Username);
if (_interactionService.IsValidReturnUrl (model.ReturnUrl) || Url.IsLocalUrl (model.ReturnUrl)) {
return Redirect(model.ReturnUrl);
}
return Redirect("~/");
}
}
return Redirect("~/");
}
问题是“返回Redirect()”没有找到角度,是和Razor一样,如何在.NETE控制器中重定向FrontEnd中的Angular?
这是使用IdentityServer4实现的OpenID身份验证的隐式流程。
总结是不推荐的方法,您应该将IS4与Client&Api分开。更多安全控制措施到位。
我之前在这里查看过相同的查询:IdentityServer 4 Restfull Login/Logout