如何根据 Angular(或另一个 SPA)的 Asp.Net Core 身份进行身份验证?

J4N*_*J4N 2 single-page-application .net-core asp.net-core asp.net-core-identity angular

我正在创建一个服务,它将以 Asp.Net Core 作为后端,以 Angular 作为前端。我正在微软为 SPA 提供的不同模板上测试一些内容。

因此,我使用 .Net core 5 cli 使用此命令创建了一个:

dotnet new angular -au Individual
Run Code Online (Sandbox Code Playgroud)

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

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

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

所以我的问题是,如何对使用 asp.net core 身份的 Asp.Net core 服务器进行身份验证?

Dav*_*ing 15

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

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

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

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

并检查:使用 asp .net core 3 API 登录 Angular SPA,无需在 SPA 之外重定向

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

这里有关于如何将 Razor 页面搭建到项目中的文档: https: //learn.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-管理

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

这是 Rick Stahl 的一篇精彩文章:https://weblog.west-wind.com/posts/2021/Mar/09/Role-based-JWT-Tokens-in-ASPNET-Core