如何在MVC项目中使用.NET和Angular 5

问题描述 投票:0回答:1

我正在使用带有Angular 5的.NET Core 2.0。我需要有关使用此技术的工作的信息。使用Angular CLI和dotnet CLI在单个项目MVC中使用Angular作为BackEnd的前端和.NET Core是可行的吗?我做了实验并且结果很好,但是,我在.NEt中的控制器和你在前面与Angular的连接有问题。

我有这个架构:

  • 一个SPA Angular(客户端应用程序)用于管理。
  • 一个AuthServer MVC(.NET Core和Angular),用于验证我的用户和客户端(API,服务器等)。

我使用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):

enter image description here

如何在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身份验证的隐式流程。

angular asp.net-core oauth-2.0 openid identityserver4
1个回答
1
投票

总结是不推荐的方法,您应该将IS4与Client&Api分开。更多安全控制措施到位。

我之前在这里查看过相同的查询:IdentityServer 4 Restfull Login/Logout

© www.soinside.com 2019 - 2024. All rights reserved.