IdentityServer 4 confused on how it all works(身份服务器4对它的工作原理感到困惑)
问题描述
我读了很多关于Identity Server 4的书,但我还是有点困惑,因为它似乎有太多可移动的部件。 我现在知道它是一个单独的项目,它处理对用户进行身份验证。我仍然不明白的是,用户如何注册到它?谁存储用户名/密码?
我计划进行此设置
Reactjs front end
Asp.net Web Api Core 2
Identity Server
那么它会奏效吗?到目前为止,我看到的所有视频都谈到了用户在内存中做什么是为了测试,但他们从来没有说过要注册它。 我看过一些视频,其中他们有一个现有的数据库,然后将其与Identity Server 4连接起来,它会检查该数据库。然而,当你与新人签约时,他们不会谈论你是否重新开始,甚至不会在他们的场景中。
编辑
Camilo Terevinto提出了一个使用ASP.NET核心标识的观点,我一直在研究它,并有一些问题。
我现在对此的理解是这样的
- 用户访问我的reactjs站点并想要登录
- 发送到Identity Server 4(IS4)并键入凭据
- IS4查看包含ASP.NET核心身份表的数据库并验证用户
- 如果一切正常,则转到IS4表并添加所需的任何内容。
- 发回用户和令牌。
- 现在,Reactjs可以访问我的Web API并从中获取其他数据。
我的问题是如果用户正在注册,会发生什么情况。
用户访问我的reactjs站点并希望注册
用户查看我的html/reactjs表单并填写
信息发送到WebAPI并存储在ASP.NET核心身份表中
现在怎么办,我必须将用户发送到我的IS4,他们现在必须在那里登录吗?这看起来很糟糕。
在此方案中,还有什么可以阻止某人使用注册向我的API发送垃圾邮件,因为它是一个开放的终结点。
推荐答案
谁存储用户名/密码?
Identity Server的美妙之处在于它不在乎。您可以使用数据库、文本文件或活动目录。您有责任选择最适合您的用例。
IMO,使用ASP.NET Core Identity管理用户的CRUD(Identity Server已经提供了绑定,您可以在其演示中看到它是如何完成的)是最简单的方法。如果您以前使用过ASP.NET标识,则只需添加
services.AddIdentityServer().AddAspNetIdentity<YourUserClass>();
ASP.NET核心身份是Microsoft提供的可选ASP.NET核心成员资格库,允许您使用内部(Windows、数据库)方法和外部(OAuth/OpenID Connect-Facebook、Google、Microsoft Account等)系统注册和登录用户。Microsoft在Microsoft Docs站点look here for an introduction中提供了大量信息。
在这种情况下,可以将ASP.NET Core Identity视为提供Identity Server用户、角色和声明信息的媒介。您可以通过身份创建用户,但实际的身份验证和授权是由Identity Server完成的。
您可以公开REST端点,以便您的Reaction应用程序能够注册(并可能修改?)您的用户及其角色。对于登录,理想的方式是使Reaction应用程序通过隐式流联系Identity Server。 但是,问问自己方案中是否需要Identity Server。如果该Identity Server保护的唯一应用程序是React应用程序,这很可能是一种浪费,您使用ASP.NET Core Identity本身就可以了。
关于您的编辑,第一个流程几乎可以,但是:
- 如果一切正常,则转到IS4表并添加所需的任何内容。
此步骤不会发生。如果一切正常,IS4将生成令牌并返回它。
与任何OAuth 2.0或OpenID Connect解决方案一样,IS4只向客户端返回生成的令牌。不过,令牌本身包含有关用户的信息。
- 发回用户和令牌。
请记住,ASP.NET核心标识将托管在与IS4相同的应用程序中,并且它们可以轻松地(如果您愿意)共享相同的数据库。
对于第二个流,如果Identity与IS4在同一个应用程序中,则很容易让用户登录(事实上,这很常见)。如果它们是分开的,您很可能必须像往常一样使Reaction应用程序调用为4。
我说您可以对标识和IS4使用相同的数据库,因为至少对我来说,将所有安全组件(即应用程序和用户)放在一起是有意义的。
用户信息由USERS表中的IDENTITY给出,他们的"配置文件"数据可以存储为声明(同样,使用IDENTITY来持久化他们)以及他们的授权信息作为声明或角色。IS4会将用户的所有角色映射到单个"角色"声明,因此这是您的选择。
如您所见,Identity充当IS4的存储。身份创建和维护数据,IS4使用数据。
关于登录/注册过程,在IS4应用程序中使用这些过程是很常见的,以便所有客户端使用相同的视图,并且用户在应用程序之间获得相同的UX。如果需要,甚至可以根据客户ID为登录/注册提供不同的视图。
请始终记住,需要联系您的IS4的每个应用程序都需要在IS4数据库中注册为客户端,并且需要启用它。如果应用程序使用来自与数据库中存储的URL不同的URL的客户端ID,则当客户端ID受到威胁或公知时,请求将被拒绝以增强安全性,就像JavaScript Web客户端的情况一样。这篇关于身份服务器4对它的工作原理感到困惑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:身份服务器4对它的工作原理感到困惑
基础教程推荐
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- SSE 浮点算术是否可重现? 2022-01-01