身份服务器4对它的工作原理感到困惑 [英] IdentityServer 4 confused on how it all works

查看:11
本文介绍了身份服务器4对它的工作原理感到困惑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我读了很多关于Identity Server 4的书,但我还是有点困惑,因为它似乎有太多可移动的部件。

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

我计划进行此设置

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

那么它会奏效吗?到目前为止,我看到的所有视频都谈到了用户在内存中做什么是为了测试,但他们从来没有说过要注册它。

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

编辑

Camilo Terevinto提出了一个使用ASP.NET核心标识的观点,我一直在研究它,并有一些问题。

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

  1. 用户访问我的reactjs站点并想要登录
  2. 发送到Identity Server 4(IS4)并键入凭据
  3. IS4查看包含ASP.NET核心身份表的数据库并验证用户
  4. 如果一切正常,则转到IS4表并添加所需的任何内容。
  5. 发回用户和令牌。
  6. 现在,Reactjs可以访问我的Web API并从中获取其他数据。

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

  1. 用户访问我的reactjs站点并希望注册

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

  3. 信息发送到WebAPI并存储在ASP.NET核心身份表中

  4. 现在怎么办,我必须将用户发送到我的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本身就可以了。


关于您的编辑,第一个流程几乎可以,但是:

  1. 如果一切正常,则转到IS4表并添加所需的任何内容。

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

  1. 发回用户和令牌。
与任何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对它的工作原理感到困惑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆