【发布时间】:2017-12-16 11:11:15
【问题描述】:
我正在使用 .NET Core 2.0 和 Angular 5。我需要有关使用这项技术的工作的信息。 使用 Angular CLI 和 dotnet CLI 在单个项目 MVC 中将 Angular 用于前端,将 .NET Core 用于后端是否可行?我做了实验,结果很好,但是,我在 .NEt 中的控制器以及您在 Front 中与 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) 中,我有一个“登录”按钮,当我单击此按钮时,这会向我的身份验证服务器发出请求,并且该端点应该提取 returlURL 并返回到 Angular 的登录页面。
在剃刀中:
return View(vm);
这是接收到的 URL 参数的 returnURL,因为 admin.myappp.com 到 auth.myapp.com (localhost:5000):
如何在 Angular 中使用?我需要返回这个 ViewModel(带有 returnURL 的信息)并在登录请求(HttpPost)中使用。 我在想也许删除登录的 GET 端点会是更好的选择,并通过 Angular 路由器执行 returnURL 的“捕获”,一旦你有了这个字符串,如果你向端点发出请求通过 POST 登录以执行身份验证,然后通过 .NET 驱动程序使用访问令牌重定向到我的 SPA。哪个是最好的选择?无论哪个是最好的选择,我推理的最后一部分都会导致我遇到以下问题:
其次,我有一个控制器,用于在域 auth.myapp.com 中实现 MVC 应用程序中的登录,这个 HttpPOST 控制器接收一个包含登录信息的模型(用户名、密码和 returnURl(来自 ViewModel 之前的) ),这个模型是从连接 .NET 控制器的服务 Angular 接收的,如果结果是肯定的,这应该重定向到其他外部主机中的其他 SPA,例如:admin.myapp.com,带有 access_token 用于SPA。 我使用此代码:
[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("~/");
}
问题是 Angular 找不到“return Redirect()”,Razor 是的,如何在前端使用 Angular 重定向,因为 .NET 控制器?
这是一个 OpenID 身份验证的隐式流程,使用 IdentityServer4 实现。
【问题讨论】:
-
不确定您是否有机会,但请查看 IdentityServer4.Samples 快速入门以了解隐式流。种子利用运行 js 脚本的视图,该脚本在成功登录后相应地重定向回应用程序。您还可以在控制器中实现执行重定向操作的逻辑,但这不是创始人推荐的方法。
-
您好,感谢您的回答。我只是在查看快速入门和 IdentityServer4 的示例,问题是他们使用 Razor 来显示 intarfaz,因此很容易从 MVC 控制器执行重定向。我的问题是如何将其应用于 Angular SPA,在其中我将 Razor 替换为 Angular,以便我认为我必须直接执行 Angular 的重定向,不是吗?
-
好的,我想我明白了,您想登录/注册而不重定向我对 IS MVC 组件是否正确?我实际上对此进行了调查,这是我得到的答案stackoverflow.com/questions/46880662/…。总结是不推荐的方法,您应该将您的 IS4 与 Client & Api 分开。更多安全控制措施到位
-
@Aeseir 好吧,这刚刚回答了我所有的问题,非常感谢。我想选择您的答案作为正确答案,请将其添加为答案,以便我给您评分,否则我将使用您与我分享的给定答案的链接自动回复。让我知道你想要什么。谢谢。
标签: angular asp.net-core oauth-2.0 openid identityserver4