- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在阅读和观看有关 Identity Server 4 的大量内容,但我仍然对它感到有些困惑,因为它似乎有太多的事件部分。
我现在明白这是一个单独的项目,它负责对用户进行身份验证。我仍然不明白的是用户如何注册它?谁存储用户名/密码?
我打算有这个设置
Reactjs front end
Asp.net Web Api Core 2
Identity Server
那它会起作用吗?到目前为止,我看到的所有视频都在谈论在内存用户中执行找到的用于测试的内容,但他们从未谈论过注册它。
我看过一些视频,他们有一个现有的数据库,然后将其与 Identity Server 4 连接起来并检查该数据库。然而,当您注册新人时,他们不会谈论您是否重新开始,甚至不会谈论他们的情况。
编辑
Camilo Terevinto 提出了使用“ASP.NET Core Identity”的观点,我一直在研究它并有一些问题。
我现在的理解是这样的
我的问题是如果用户正在注册会发生什么。
一个用户来到我的 reactjs 站点并想要注册
用户看到我的 html/reactjs 表单并填写
信息被发送到 webapi 并存储在 ASP.NET Core Identity 表中
现在怎么办,我是否必须将用户发送到我的 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。
关于您的编辑,第一个流程几乎没问题,但是:
- If all is good then it goes to IS4 tables and adds whatever it needs.
这一步不会发生。如果一切正常,IS4 生成 token 并将其返回。
- 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/
我正在尝试学习Rust。我正在阅读一本书online,该书实现了unix程序cat。现在,我试图读取作为像cargo run file1.txt file2.txt这样的参数传递的文件的内容,但是程序
我在 GHC 8.0.1 中遇到了一个带有种类索引 (?) GADT 的奇怪情况,其中在类型与种类签名中引入 foralls 会产生不同的类型检查行为。 考虑以下数据类型: {-# LANGUAGE
我正在使用 Perl 5.10 开发应用程序,HTML::Mason和 Apache 2.2。这是我第一次在大型项目中使用 Perl 5.10。我每隔一段时间就会出现奇怪的行为。应用程序因一个非常奇怪
我正在尝试将文件上传到aws中的rust中,因为我使用的是 rusoto_s3 的s3 rust客户端,当这些部分从单个线程发送时,我设法使分段上传代码正常工作不是我想要的,我想上传大文件,并且希望能
我是一名优秀的程序员,十分优秀!