gpt4 book ai didi

c# - IdentityServer 4 对它的工作原理感到困惑

转载 作者:太空狗 更新时间:2023-10-30 01:29:47 27 4
gpt4 key购买 nike

我一直在阅读和观看有关 Identity Server 4 的大量内容,但我仍然对它感到有些困惑,因为它似乎有太多的事件部分。

我现在明白这是一个单独的项目,它负责对用户进行身份验证。我仍然不明白的是用户如何注册它?谁存储用户名/密码?

我打算有这个设置

Reactjs front end 
Asp.net Web Api Core 2
Identity Server

那它会起作用吗?到目前为止,我看到的所有视频都在谈论在内存用户中执行找到的用于测试的内容,但他们从未谈论过注册它。

我看过一些视频,他们有一个现有的数据库,然后将其与 Identity Server 4 连接起来并检查该数据库。然而,当您注册新人时,他们不会谈论您是否重新开始,甚至不会谈论他们的情况。

编辑

Camilo Terevinto 提出了使用“ASP.NET Core Identity”的观点,我一直在研究它并有一些问题。

我现在的理解是这样的

enter image description here

  1. 一个用户来到我的 reactjs 站点并想要登录
  2. 被发送到 Identity Server 4 (IS4) 并输入凭据
  3. IS4 查看我的包含 ASP.NET Core Identity 表的数据库并验证用户
  4. 如果一切正常,那么它会转到 IS4 表并添加它需要的任何内容。
  5. 发回用户和 token 。
  6. 现在 Reactjs 可以访问我的 web api 并从中获取其他数据。

我的问题是如果用户正在注册会发生什么。

enter image description here

  1. 一个用户来到我的 reactjs 站点并想要注册

  2. 用户看到我的 html/reactjs 表单并填写

  3. 信息被发送到 webapi 并存储在 ASP.NET Core Identity 表中

  4. 现在怎么办,我是否必须将用户发送到我的 IS4,他们现在必须在那里登录?这看起来很糟糕。

    同样在这种情况下,什么可以阻止有人通过注册向我的 api 发送垃圾邮件,因为它是一个开放的端点。

最佳答案

Who stores the username/password?

Identity Server 的美妙之处在于它不关心。您可以使用数据库、文本文件或 Active Directory。您有责任选择最适合您的用例的那个。

IMO,使用 ASP.NET Core Identity 来管理用户的 CRUD(Identity Server 已经提供了绑定(bind),您可以在他们的演示中看到它是如何完成的)是最简单的方法。如果您之前使用过 ASP.NET Identity,那么您需要添加的只是

services.AddIdentityServer().AddAspNetIdentity<YourUserClass>();

ASP.NET Core Identity 是 Microsoft 的可选 ASP.NET Core 成员库,它允许您使用内部(Windows、数据库)方法和外部(OAuth/OpenId Connect - Faceboook、Google、Microsoft 帐户)注册和登录用户等)系统。 Microsoft 在 Microsoft 文档站点中提供了大量信息,look here for an introduction .
在这种情况下,将 ASP.NET Core Identity 视为提供用户、角色和声明的 Identity Server 信息的媒介。您通过 Identity 创建用户,但实际的身份验证和授权是由 Identity Server 完成的。


您可以为您的 React 应用程序公开 REST 端点,以便能够注册(并可能修改?)您的用户及其角色。对于登录,理想的方式是让 React 应用程序通过隐式流程联系身份服务器。

但是,问问自己,您的场景是否需要 Identity Server。如果唯一受 Identity Server 保护的应用程序是 React 应用程序,那很可能是一种浪费,您可以单独使用 ASP.NET Core Identity。


关于您的编辑,第一个流程几乎没问题,但是:

  1. If all is good then it goes to IS4 tables and adds whatever it needs.

这一步不会发生。如果一切正常,IS4 生成 token 并将其返回。

  1. Sends back the user and tokens.

与任何 OAuth 2.0 或 OpenID Connect 解决方案一样,IS4 仅将生成的 token 返回给客户端。不过, token 本身包含有关用户的信息。

请记住,ASP.NET Core Identity 将托管在与 IS4 相同的应用程序中,并且它们可以轻松(如果需要)共享相同的数据库。

对于第二个流程,如果 Identity 与 IS4 在同一个应用程序中,则用户登录非常容易(事实上,这很常见)。如果它们是分开的,您可能必须像往常一样让 React 应用程序调用 IS4。


我说您可以为 Identity 和 IS4 使用相同的数据库,因为至少对我来说,将所有安全内容(将是应用程序和用户)放在一起是有意义的。

用户信息由 Users 表中的 Identity 给出,他们的“配置文件”数据可以存储为 Claims(同样,使用 Identity 来持久化它们),他们的授权信息可以存储为 Claims 或 Roles。 IS4 会将用户的所有角色映射到单个“角色”声明,因此这是您的选择。

如您所见,Identity 充当 IS4 的存储。身份创建和维护数据,IS4 使用它。


关于登录/注册过程,在 IS4 应用程序中使用这些是很常见的,这样所有客户端都使用相同的 View ,并且用户在应用程序中获得相同的用户体验。如果需要,甚至可以根据客户端 ID 为登录/注册提供不同的 View 。

永远记住,每个想要联系您的 IS4 的应用程序都需要在 IS4 数据库中注册为客户端,并且需要启用它。如果应用程序使用来自不同于数据库中存储的 URL 的 ClientId,当 ClientId 被泄露或为公众所知时,请求将被拒绝以增强安全性,JavaScript Web 客户端就是这种情况。

关于c# - IdentityServer 4 对它的工作原理感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49701689/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com