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

2024-05-19

我阅读和观看了很多有关 Identity Server 4 的内容,但我仍然对它有点困惑,因为似乎有很多移动部件。

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

我打算进行此设置

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

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

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

Edit

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

我现在对此的理解是这样的

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

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

  1. 用户来到我的 ReactJS 网站并想要注册

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

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

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

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


谁存储用户名/密码?

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

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

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

ASP.NET Core Identity 是来自 Microsoft 的可选 ASP.NET Core 成员资格库,允许您使用内部(Windows、数据库)方法和外部(OAuth/OpenId Connect - Faceboook、Google、Microsoft 帐户等)注册和登录用户系统。 Microsoft 在 Microsoft Docs 站点中提供了大量信息,在这里查看介绍 https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity?tabs=visual-studio%2Caspnetcore2x.
在这种情况下,请将 ASP.NET Core Identity 视为提供用户、角色和声明的 Identity Server 信息的媒介。您通过 Identity 创建用户,但实际的身份验证和授权是由 Identity Server 完成的。


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

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


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

  1. 如果一切顺利,那么它会进入 IS4 表并添加它需要的任何内容。

这一步不会发生。如果一切正常,IS4 会生成令牌并返回它。

  1. 发回用户和令牌。

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

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

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


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

用户信息由用户表中的身份给出,他们的“个人资料”数据可以存储为声明(再次使用身份来持久化它们),并且他们的授权信息可以存储为声明或角色。 IS4 会将用户的所有角色映射到单个“角色”声明,因此您可以选择。

正如您所看到的,Identity 充当 IS4 的存储。身份创建并维护数据,IS4 使用数据。


关于登录/注册过程,在 IS4 应用程序中使用这些过程很常见,以便所有客户端都使用相同的视图,并且用户在应用程序之间获得相同的 UX。如果需要的话,甚至可以很容易地根据客户端 ID 提供不同的登录/注册视图。

永远记住,每个想要联系 IS4 的应用程序都需要在 IS4 数据库中注册为客户端,并且需要启用它。如果应用程序使用的 URL 中的 ClientId 与存储在数据库中的 URL 不同,则当 ClientId 被泄露或被公开时,该请求将被拒绝以增强安全性,就像 JavaScript Web 客户端的情况一样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IdentityServer 4 对它的工作原理感到困惑 的相关文章

随机推荐

  • Twitter 搜索 API 速率限制如何运作?

    我不清楚 Twitter 速率限制 每个访问令牌 用户每小时 350 个请求 的含义 他们如何限制请求 在 1 个请求中我可以获得多少数据 速率限制基于请求 而不是您收到的数据量 例如字节 考虑到这一点 您可以通过使用您正在调用的特定端点的
  • ValueError:数据必须为正(boxcox scipy)

    我正在尝试将我的数据集转换为正态分布 0 8 298511e 03 1 3 055319e 01 2 6 938647e 02 3 2 904091e 02 4 7 422441e 02 5 6 074046e 02 6 9 265747e
  • MySQL:如何仅获取正值的平均值?

    假设我有 INT 列 并且我使用 1 来表示插入时没有可用数据 我想获得该列中所有 0 或更大值的平均值 这可能吗 Thanks 我忘了提及 我正在与其他 AVG 一起执行此操作 因此从选项卡中选择 avg a avg b avg d 所以
  • 无法理解 Java 地图条目集

    我正在看一个 java 刽子手游戏 https github com leleah EvilHangman blob master EvilHangman java https github com leleah EvilHangman b
  • 迁移到 java 17 后有关“每个进程的内存映射”和 JVM 崩溃的 GC 警告

    我们正在将 java 8 应用程序迁移到 java 17 并将 GC 从G1GC to ZGC 我们的应用程序作为容器运行 这两个基础映像之间的唯一区别是 java 的版本 例如对于 java 17 版本 FROM ubuntu 20 04
  • 设置高亮大括号的 vim 颜色主题

    如何更改突出显示大括号的 vim 配色方案 我希望实际编辑 vim 主题文件以使更改永久生效 问候 克雷格 匹配括号的自动高亮颜色称为MatchParen 您可以通过执行以下操作来更改 vimrc 中的颜色 highlight MatchP
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • Flutter 深度链接

    据Flutter官方介绍深层链接页面 https flutter dev docs development ui navigation deep linking 我们不需要任何插件或本机 Android iOS 代码来处理深层链接 但它并没
  • 如何防止弹性项目高度因其内容而溢出[重复]

    这个问题在这里已经有答案了 我刚刚开始学习 Flex 到目前为止我印象深刻 但是 我对包含页眉 页脚和三列的全页应用程序遇到了问题 第一列包含一个项目列表 由于我无法为其父级设置固定高度 因此每次列表增长时 它都会将页脚向下推 这是一个带有
  • 错误:无法满足的约束 - 在 php:7-fpm-alpine 上

    我正在考虑在 fpm alpine 容器上设置 laravel 遇到一个问题 下面的 Dockerfile 会产生一些错误 FROM php 7 fpm alpine install extensions needed for Larave
  • 使(文本到图像)图像具有一定的宽度但无限的长度?

    我有下面的代码 可以用大量文本生成图像 我希望该图像的宽度为 700 像素 我还希望它保留字符串所具有的段落结构 该字符串来自 MySQL 数据库 我怎样才能实现这一点 font 2 width imagefontwidth font st
  • 找不到“节点”的类型定义文件

    更新 Angular Webpack 和 TypeScript 后出现奇怪的错误 知道我可能会错过什么吗 当我使用 npm start 运行应用程序时 出现以下错误 at loader Cannot find type definition
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • 序列化对象以进行单元测试

    假设在单元测试中我需要一个对象 其中所有 50 个字段都设置了一些值 我不想手动设置所有这些字段 因为这需要时间而且很烦人 不知何故 我需要获得一个实例 其中所有字段都由一些非空值初始化 我有一个想法 如果我要调试一些代码 在某个时候我会得
  • ComboBox DataBinding 导致 ArgumentException

    我的几个类对象 class Person public string Name get set public string Sex get set public int Age get set public override string
  • 在具有相同属性名称的不同数据类型上使用 ModelMapper

    我有两节课说Animal AnimalDto我想用ModelMapper将 Entity 转换为 DTO 反之亦然 但是对于具有相似名称的一些属性 这些类应该具有不同的数据类型 我该如何实现这一目标 动物 java public class
  • 如何测试 POST spring mvc

    我的问题是如何调用它 我可以 MyObject o new MyObject myController save o value 但这不是我想做的 我希望 MyObject 位于请求帖子正文中 如何才能做到这一点 Requestmappin
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • 查找与另一列 Pandas 中的唯一值关联的列中的值的交集

    如果我有一个像这样的数据框 非常小的例子 col1 col2 0 a 1 1 a 2 2 b 1 3 b 2 4 b 4 5 c 1 6 c 2 7 c 3 我想要所有的交集col2当价值观与其独特性相关时col1值 因此在这种情况下 交集
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea