如何在 MVC 项目中使用 .NET 和 Angular 5
How to use .NET with Angular 5 in a MVC project
我正在使用 .NET Core 2.0 Angular 5. 我需要有关使用该技术的信息。
在单个项目 MVC 中使用 Angular 前端和 .NET Core 后端是否可行,使用 Angular CLI 和 dotnet CLI?我做了实验,结果很好,但是,我在 .NEt 中的控制器以及您与前面的 Angular 的连接有问题。
我有这个架构:
- 一个 SPA Angular(客户端应用程序)用于管理。
- 一个 AuthServer MVC(.NET Core 和 Angular)用于身份验证
我的用户和客户端(API、服务器等)。
我使用隐式流程进行身份验证,所以在 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) 中,我有一个按钮 "sign in",当我单击此按钮时,这实现了对我的 auth 服务器的请求,并且此端点应该提取 returlURL 和 return 到 Angular 的登录页面。
在剃刀中:
return View(vm);
这是 returnURL 收到的 URL 参数,因为 admin.myappp.com 到 auth.myapp.com (localhost:5000):
如何在Angular中使用?我需要 return 这个 ViewModel(包含 returnURL 的信息)并在登录请求 (HttpPost) 中使用。
我在想,删除登录的 GET 端点并通过 Angular 路由器执行 returnURL 的 "capture" 可能是更好的选择,并且一旦你有了这个字符串,如果你通过 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("~/");
}
问题是 "return Redirect()" 在 angular 中找不到,在 Razor 中找到了,如何在前端中使用 Angular 重定向自 .NET 控制器?
这是 OpenID 身份验证的隐式流程,使用 IdentityServer4 实现。
总结是不推荐的方法,您应该将 IS4 与客户端和 Api 分开。更多安全控制到位。
我之前在这里查看过相同的查询:
我正在使用 .NET Core 2.0 Angular 5. 我需要有关使用该技术的信息。 在单个项目 MVC 中使用 Angular 前端和 .NET Core 后端是否可行,使用 Angular CLI 和 dotnet CLI?我做了实验,结果很好,但是,我在 .NEt 中的控制器以及您与前面的 Angular 的连接有问题。
我有这个架构:
- 一个 SPA Angular(客户端应用程序)用于管理。
- 一个 AuthServer MVC(.NET Core 和 Angular)用于身份验证 我的用户和客户端(API、服务器等)。
我使用隐式流程进行身份验证,所以在 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) 中,我有一个按钮 "sign in",当我单击此按钮时,这实现了对我的 auth 服务器的请求,并且此端点应该提取 returlURL 和 return 到 Angular 的登录页面。
在剃刀中:
return View(vm);
这是 returnURL 收到的 URL 参数,因为 admin.myappp.com 到 auth.myapp.com (localhost:5000):
如何在Angular中使用?我需要 return 这个 ViewModel(包含 returnURL 的信息)并在登录请求 (HttpPost) 中使用。 我在想,删除登录的 GET 端点并通过 Angular 路由器执行 returnURL 的 "capture" 可能是更好的选择,并且一旦你有了这个字符串,如果你通过 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("~/");
}
问题是 "return Redirect()" 在 angular 中找不到,在 Razor 中找到了,如何在前端中使用 Angular 重定向自 .NET 控制器?
这是 OpenID 身份验证的隐式流程,使用 IdentityServer4 实现。
总结是不推荐的方法,您应该将 IS4 与客户端和 Api 分开。更多安全控制到位。
我之前在这里查看过相同的查询: