如何从调用使用 .NET Core 3 构建的 API 的 react js 内置网站生成和/或获取 access_token 和 refresh_token?

问题描述

我正在使用调用 RESTful API(使用 .NET Core 3.1 构建)的 react 构建 Web 应用程序。 Web 应用程序和很快的移动应用程序通过 API 访问所有数据。我想集成身份验证/授权,但想知道从哪里开始。我正在考虑使用 IdentityServer4 来构建令牌服务,但这可能是一种矫枉过正,尤其是安全性不是我的专长。但我也想要一些我可以轻松集成/使用但也不只与一个令牌提供者(例如,仅限 MS)绑定的东西 - 这将过于严格,因为目标用户可能更喜欢使用用户名/密码,或者他们的谷歌/MS/fb ......)。我该怎么办?我应该从哪里开始?

解决方法

我不知道您项目的复杂程度。给点建议吧。

  1. 如果项目复杂度一般,可以使用jwtbearer认证,使用内置授权。因为你已经使用了前后分离和认证和授权可以根据httpstatus很好的分离。

    如果不使用jwt,可以使用identity。因为asp.net core已经很好的整合了身份。但是 jwt 是一个更好的建议。

  2. 如果你处理的业务比较复杂,可以考虑IdentityServer4。您需要在另一台服务器上配置身份验证和授权。

,

这里是活动的部分,学习曲线相当大,因为 OAuth 技术涵盖了许多架构方面。我的目标是在早期主要关注 UI 和 API 集成。

授权服务器 (AS)

这将处理登录屏幕、基于标准的消息、发行令牌、审计等。我建议从 free or low cost cloud service 开始,以便您可以快速入门并了解如何管理系统。

API

这些将验证传入的访问令牌并构建声明主体。我将首先了解您需要哪些声明以及在验证令牌后您将如何授权请求。

网络用户界面

这些使用授权代码流 (PKCE),然后处理和验证 OAuth 响应。一个常用的库是 oidc-client,它将为您处理很多复杂的问题。

移动用户界面

这些使用与上面相同的流程,但在处理凭据的应用浏览器中使用。最常用的库是 AppAuth,它处理移动管道。

可扩展性

一旦集成了上述部分,您就可以在不更改任何代码的情况下执行此操作:

  • 添加额外的登录方法,如我的 Federated Logins Blog Post
  • 中所述
  • 在您更好地了解您的 AS 要求后切换提供商

在线代码示例

我的博客有一堆 UI and API Code Samples,您可以在本地 PC 上运行,从 Initial Code Sample 开始,然后是更高级的,例如 React SPA with .Net Core API

,

IdentityServer4 是一个不错的选择,整合到您的项目中并不难。您可能会说它可能很复杂,但它只是提供了一个授权 API,为用户请求颁发身份验证令牌(它提供用户和密码作为身份),并且它为您提供了部署外部身份验证(FB、Google...)的选项。这并不是一种矫枉过正,因为在安全方面,它越复杂越好。

如果您有兴趣,这里有一个指南:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-api-authorization?view=aspnetcore-5.0

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...