使用 ASP.NET Core 3 进行 SPA 身份验证的正确方法是啥?

Posted

技术标签:

【中文标题】使用 ASP.NET Core 3 进行 SPA 身份验证的正确方法是啥?【英文标题】:What is the correct way to do SPA Authentication with ASP.NET Core 3?使用 ASP.NET Core 3 进行 SPA 身份验证的正确方法是什么? 【发布时间】:2020-02-07 16:46:56 【问题描述】:

新的 ASP.NET Core 3 Angular 项目模板with authentication 使用 Identity Server 和 OIDC 进行身份验证。到目前为止,我一直为我的 Angular SPA 使用简单的 JWT-Authentication。

现在我的问题是:如果您想使用 Angular 应用程序的登录页面,实现身份验证的正确方法是什么?

所以我已经在我的 Angular 应用程序中实现了一个登录页面,我想使用它。据我所知,Identity Server 的 OIDC 工作流程总是使用服务器上生成的登录页面。就我而言,我应该继续使用简单的 JWT-Authentication,还是可以将我的 Angular 登录页面与 Identity Server 一起使用?

我很确定问题在于我对 OIDC 缺乏了解,但我已经阅读了一本书和几篇关于它的文章,但仍然不太了解。

我会很高兴收到一个解释性的答案!

【问题讨论】:

【参考方案1】:

如果您正在做一个真正的 SPA,那么您根本不需要 asp.net。使用 oidc 客户端库来管理安全性。如果是这样,我的教程和代码示例可能会有所帮助: https://authguidance.com/2017/09/24/basicspa-overview/

或者你正在做一个服务器端的网络应用程序?可能取决于您希望如何托管网络内容..

【讨论】:

我计划通过 ASP.NET Core 中的 app.UseSpa 中间件来托管 SPA。因此,正如我正确理解的那样,当我使用身份服务器时,我正在设置像 Google 这样的身份提供者,然后就无法使用 SPA 的登录页面(利用身份提供者的 SPA)。登录页面必须与身份提供者的后端托管在同一台服务器上。这是正确的吗? 是的 - SPA 不应该有自己的登录页面,应该使用身份提供者的登录页面 - 就像我上面的示例 SPA,它使用 Okta 的登录页面【参考方案2】:

OIDC 和 JWT 都是无状态身份验证的具体行业标准。

无状态身份验证将用户会话数据存储在客户端

OAuth 是与 3rd 方应用程序(例如 google 或 github)更直接的集成,但我认为 JWT 更容易实现和操作。

但您不必强制使用 Identity 或 Identity Server,您还可以实现个人表进行身份验证,但要回答您的问题,是的,您可以将 IdentityServer 与 JWT 一起使用:http://docs.identityserver.io/en/latest/topics/apis.html

我将 Angular 8 和 net.Core 3 Web Api 与 JWT 和 Microsoft 身份和角色表一起使用

【讨论】:

以上是关于使用 ASP.NET Core 3 进行 SPA 身份验证的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

SPA (Aurelia) + ASP.NET Core WebAPI + Google 身份验证

在单个 ASP.NET Core 3.1 Web API 中管理两个 SPA;一个在根目录中,另一个在“管理员”路由中

ASP.NET Core SPA 中基于 JWT 的身份验证 - 前端验证

我可以使用 IdentityServer4 spa JS UI 而不是 asp .net core mvc 吗?

从 ASP.NET Core MVC 项目提供 Angular SPA 时,我可以使用 OIDC 混合流吗?

ASP.Net Core 6,SPA,端点 - 我无法从 http get 请求调用控制器