如何从 Angular(或其他 SPA)针对 Asp.Net Core 身份进行身份验证?

时间:2021-04-07 14:01:00

标签: angular asp.net-core .net-core single-page-application asp.net-core-identity

我正在创建一个将 Asp.Net Core 作为后端、Angular 作为前端的服务。 我正在对微软为 SPA 提供的不同模板进行多项测试。

所以我用 .Net core 5 cli 用这个命令创建了一个:

dotnet new angular -au Individual

似乎可行,但我的理解是,当我需要将用户重定向到加载页面时(因为未连接或权限不足),我将被重定向到 Asp.Net Core 页面的 UI。< /p>

我已经看到我可以自定义这个页面(好吧,创建一个脚手架版本并自定义它),但它仍然让我担心:

  • 这可能会在 Angular 应用程序和剃刀页面之间来回多次
  • 我们的应用程序的设计是,Asp.Net 服务器只提供一个 API 和 Angular 应用程序的静态文件,因此突然从 asp.net 服务器直接提供一些页面似乎是错误的。
  • 我正在使用 angular 库来处理我的按钮、复选框、标题的所有主题/样式,具有材质样式,... 必须再次为登录页面重新创建所有这些样式似乎很麻烦。
  • 我将有一些外部硬件设备可以连接到这个 API,所以我认为无论如何他们应该能够在不使用为登录提供的 asp.net razor 页面的情况下完成所有操作。

那么我的问题是,如何针对使用 asp.net 核心身份的 Asp.Net 核心服务器进行身份验证?

2 个答案:

答案 0 :(得分:2)

在示例中,MS 将您推向身份路由并使用 Razor 类库来控制登录/注册功能。它设置为使用 OpenId Connect (https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowAuth) 并在每个阶段使用重定向。如果您想保持一切纯 Angular 并公开 WebAPI 端点以进行身份​​验证,这很烦人,我认为 OpenID Connect 不会排除这一点。

.NET 文档不太清楚如何调整解决方案以适应纯 SPA 解决方案,但您可以通过编写自己的 WebAPI 控制器来处理注册和登录等。

迄今为止我找到的最好的 MS 文档在这里:https://docs.microsoft.com/en-us/dotnet/architecture/microservices/secure-net-microservices-web-applications/

这个答案也很有用:Use .NET Core Identity with an API

然后查看:Login to Angular SPA with asp .net core 3 API without redirect outside of SPA

我最初使用 Razor 登录/注册流程,但已经搭建了页面,以便我可以自定义它们。这让我有时间继续处理 Angular 项目的重要部分,但我可以轻松地回来并稍后替换登录流程。脚手架页面包含身份验证流程,因此可以更轻松地查看正在发生的事情。

这里有关于如何将 Razor 页面搭建到您的项目中的文档: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity

如果您想要自己的解决方案,请查看 https://jasonwatmore.com/post/2019/10/14/aspnet-core-3-simple-api-for-authentication-registration-and-user-management

关于 JwtBearerAuthentication 的一个有用的 YouTube 视频:https://youtu.be/h2hGGPHLqqc

答案 1 :(得分:1)

为清楚起见添加新答案。

我已经浏览了第一个答案中的所有链接,并整理了一个独立于我的 Angular 项目的 WebApi 项目。它使用身份存储 (EF),但不使用 IdentityServer,也不包含 UI(即仅 API)。它有一个支持注册和身份验证的帐户控制器,并以将 Authorize 添加到 WeatherForecast GET 方法为例。

源代码可在此处获得:https://github.com/Brubning/Noodle.WebCore.Api

我在自述文件中记录了我构建项目的步骤。您可以轻松地将其推送到使用 dotnet new angular(不包括 -au Individual)创建的 dotnet Angular 项目中。