我一直在阅读和观看很多有关Identity Server 4的内容,我仍然对此感到困惑,因为似乎有很多活动部分。
我现在明白它是一个单独的项目,它处理用户身份验证。我还没有得到的是用户如何注册?谁存储用户名/密码?
我计划进行此设置
Reactjs front end
Asp.net Web Api Core 2
Identity Server
它会起作用吗?到目前为止,我看到的所有视频都谈到了在内存用户中做了什么测试,但他们从不谈论注册它。
我看到一些视频,他们有一个现有的数据库,然后将它与Identity Server 4挂钩,然后检查该数据库。然而,他们不会谈论你的新手,甚至在他们签约新人的情况下。
修改
Camilo Terevinto提出了使用" ASP.NET核心身份"我一直在调查并提出一些问题。
我对此的理解就像这样
我的问题是如果用户正在注册会发生什么。
现在,我必须将用户发送到他们现在必须登录的IS4吗?这看起来很糟糕。
同样在这种情况下,什么会阻止某人通过注册向我的api发送垃圾邮件,因为它是一个开放的终点。
答案 0 :(得分:2)
谁存储用户名/密码?
Identity Server的美妙之处在于它并不关心。您可以使用数据库,文本文件或Active Directory。您有责任选择最适合您的用例。
IMO,使用ASP.NET核心身份来管理用户的CRUD(Identity Server已经提供了绑定,您可以看到它们在演示中的完成情况)是最简单的方法。如果您之前使用过ASP.NET身份,那么您需要添加的只是
services.AddIdentityServer().AddAspNetIdentity<YourUserClass>();
ASP.NET Core Identity是Microsoft的可选ASP.NET核心成员资格库,允许您使用内部(Windows,数据库)方法和外部(OAuth / OpenId Connect - Faceboook,Google,Microsoft帐户)注册和登录用户等系统。 Microsoft在Microsoft Docs站点look here for an introduction中提供了大量信息 在这种情况下,请将ASP.NET Core Identity视为提供用户,角色和声明的Identity Server信息的媒介。您可以通过Identity创建用户,但实际的身份验证和授权由Identity Server完成。
您可以为您的React应用程序公开REST端点,以便能够注册(并可能修改?)您的用户及其角色。对于登录,理想的方法是使React应用程序通过隐式流程与Identity Server联系。
然而,问问自己,您的方案中是否需要Identity Server。如果该Identity Server保护的唯一应用程序是React应用程序,那么很可能是浪费,您可以自己使用ASP.NET Core Identity。
关于你的编辑,第一个流程几乎没问题,但是:
- 如果一切都好,那么它会转到IS4表并添加它需要的任何内容。
醇>
此步骤不会发生。如果一切正常,IS4会生成令牌并将其返回。
- 发送回用户和令牌。
醇>
IS4,与任何OAuth 2.0或OpenID Connect解决方案一样,仅将生成的令牌返回给客户端。但令牌本身包含有关用户的信息。
请记住,ASP.NET核心标识将与IS4在同一个应用程序中托管,并且可以轻松地(如果需要)共享同一个数据库。
对于第二个流程,如果Identity与IS4在同一个应用程序中,则很容易记录用户(事实上,这很常见)。如果它们是分开的,您可能必须使React应用程序正常调用IS4。
我说你可以在Identity和IS4上使用相同的数据库,因为至少对我来说,将所有安全性内容(应用程序和用户)放在一起是有意义的。
用户信息由“用户”表中的“身份”提供,其“个人资料”数据可以存储为声明(同样,使用“身份”来保存它们),并将其授权信息存储为“声明”或“角色”。 IS4会将用户的所有角色映射到单个“角色”声明中,因此您可以选择它。
如您所见,Identity充当IS4的商店。身份创建并维护数据,IS4使用它。
关于登录/注册过程,在IS4应用程序中使用这些过程是很常见的,这样所有客户端都可以使用相同的视图,并且用户可以跨应用程序获得相同的UX。如果需要,甚至可以根据客户端ID为登录/注册提供不同的视图。
永远记住,每个想要联系IS4的应用程序都需要作为客户端在IS4数据库中注册,并且需要启用它。如果应用程序使用不同于存储在数据库中的URL的ClientId,则拒绝该请求以在ClientId被泄露或公开时增强安全性,就像JavaScript Web客户端一样。