ChatGPT解决这个技术问题 Extra ChatGPT

向 5 岁的孩子解释“基于声明的身份验证”

好吧,不完全是 5 岁的孩子,但如果可能的话,请避免流行语和企业用语。

基于声明的身份验证现在似乎风靡一时,但我找不到一个简单而实际的解释来解释它实际上是什么,它与我们现在所拥有的有什么不同(我假设“我们现在所拥有的”是基于角色的身份验证),使用它有什么好处等。

我同意@Marnix。现在您已经有了基本的了解,您可以更轻松地与 Microsoft's definition/explanation 建立联系。
如果您想花更多的精力和时间,我还发现这份白皮书很简单。引言回答了问题,图表说出了一千个字:download.microsoft.com/download/7/D/0/…
Kentico 也有关于此类术语的非常轻量级的解释docs.kentico.com/k9/managing-users/…

S
Steve

@Marnix 有一个很好的答案,但要远离它的技术方面:

基于声明的身份验证是关于定义您信任的人,以便为您提供有关身份的准确信息,并且只使用所提供的信息。我的()首选示例是在酒吧。想象一下,您想在酒吧喝杯啤酒。理论上,调酒师应该要求您提供年龄证明。你怎么证明?好吧,一种选择是让调酒师把你切成两半,然后数一数戒指的数量,但这可能会有一些问题。另一种选择是让您在一张纸上写下您的生日,酒保同意或不同意。第三种选择是去政府,拿到身份证,然后把身份证出示给酒保。

有些人可能会嘲笑只在一张纸上写下你的生日的想法,但当你在应用程序本身内验证用户时就会发生这种情况,因为这取决于调酒师(或你的应用程序)来信任这张纸.但是,我们相信政府的说法,即身份证上的生日是有效的,身份证是给请求喝酒的人的。出于所有意图和目的,调酒师(或应用程序)并不真正关心身份验证是如何发生的,因为信任。除了您的出生日期,调酒师对您一无所知,因为这就是调酒师需要知道的全部内容。现在,调酒师可以存储他们认为对他们很重要的信息,例如您最喜欢的饮料,但政府不在乎(因为它不是权威来源),所以调酒师以自己的方式存储这些信息。

CBA的关键是“谁是身份的权威来源?”


很好的比喻!我希望我能为确定一个人年龄的“将你切成两半并数戒指”的方法加分。我得试试。 :-)
我经常看到“出于所有密集目的”,以至于当人们正确地说“出于所有意图和目的”时,我真的非常感激
容易:向他们解释关于复杂主题的类比不能轻易地提炼成简单的概念,无论人们对它们的理解程度如何。而且...为什么一个 5 岁的孩子实际上会关心基于声明的身份验证?
我读了这篇文章,似乎基于声明的身份验证是第 3 方身份验证系统,如开放身份验证或社交登录,如 Microsoft 帐户、Facebook、Twitter、谷歌。任何人都可以告诉我基于声明的身份验证与开放身份验证有何不同?因为 open auth 太 3rd 方身份验证系统。
@Thomas OAuth 实际上是关于授权,而不是身份验证,这变成了完全不同的对话。他们确实提供了识别信息,但目的是使用令牌来访问他们的服务,而不是识别用户。其上的扩展是用于识别的 OpenID。在任何一种情况下,考虑它的简单方法(如果不是 100% 准确的话)是它们只是 CBA 的实现。
M
MarnixKlooster ReinstateMonica

(这是我个人对此的看法,其他人可能会有所不同。请发表其他观点作为单独的答案。)

基于声明的身份/身份验证/授权是通过将身份验证/授权转换为单独的 (Web) 服务来将用户授权的维护和用户登录从 (Web) 应用程序中分离出来。

例如,当我第一次浏览启用声明的 Web 应用程序时,它会将我的浏览器重定向到它信任的“登录服务”。我将对该服务进行身份验证(使用 Windows 身份验证、智能卡或其他),作为响应,它会发回一个“令牌”,浏览器会将其发回给 Web 应用程序。现在,Web 应用程序检查令牌是否由其受信任的登录服务进行数字签名,然后查看令牌中的“声明”。纯粹基于这些声明,应用程序决定为用户提供什么功能。

声明几乎总是包含用户的身份,通常还有与授权相关的声明(“此用户可以查看销售数据,但不能更新”),有时还包括其他信息(“鞋码 = 42”)。

关键是应用程序不知道也不关心用户是如何被认证的,也不关心授权是如何管理的:它只使用来自签名令牌中声明的信息来确定用户是谁和/或用户可以做什么查看或执行和/或有关用户的任何其他信息。

(是的,我假设这里是一个非常聪明和消息灵通的 5 岁孩子。:-)


诸如“使用 Facebook/Google/...登录”之类的基于声明的身份验证示例在起作用吗?
我相信我 5 岁的孩子会明白这一切。
@wes 你的问题有点含糊。使用 facebook 或 google 登录的简单行为不是基于声明的身份验证的示例,不是。我还认为基于声明的身份验证不是一回事。如果有的话,这将是授权。 CBA 将发挥作用的地方是在与这些提供商签约的授权步骤中。当它请求权限并且您接受时,它将为您的访问令牌添加范围。这在语义上与声明不同,但通常以非常相似的方式使用。
C
Community

以下真实世界示例取自 A Guide to Claims-Based Identity and Access Control (2nd Edition)

一个非常熟悉的类比是您每次访问机场时遵循的身份验证协议。您不能简单地走到门口并出示您的护照或驾驶执照。相反,您必须先在售票处办理登机手续。在这里,您提供任何有意义的凭证。如果你出国,你需要出示你的护照。对于国内航班,您需要出示您的驾驶执照。在验证您的照片 ID 与您的面部匹配后(身份验证),代理会查找您的航班并验证您是否已支付机票费用(授权)。假设一切正常,您会收到一张登机牌,然后带到登机口。登机牌信息量很大。登机口代理知道您的姓名和飞行常客号码(身份验证和个性化)、您的航班号和座位优先级(授权),甚至更多。登机口代理拥有高效完成工作所需的一切。登机牌上也有特殊信息。它被编码在条形码和/或背面的磁条中。此信息(例如登机序列号)证明该通行证是由航空公司签发的,不是伪造的。从本质上讲,登机牌是航空公司对您提出的一组签名声明。它规定您可以在特定时间登上特定航班并坐在特定座位上。当然,代理不需要对此深思熟虑。他们只需验证您的登机牌,阅读上面的声明,然后让您登机。同样重要的是要注意,获取已签名的声明集的方法可能不止一种,即您的登机牌。您可以前往机场的售票柜台,也可以使用航空公司的网站在家中打印登机牌。登机的登机口工作人员并不关心登机牌是如何创建的。他们不在乎您使用的是哪个发行商,只要它受到航空公司的信任。他们只关心这是一组真实的声明,允许您上飞机。在软件中,这组声明称为安全令牌。每个安全令牌都由创建它的发行者签名。如果用户提供来自受信任颁发者的有效签名安全令牌,则基于声明的应用程序认为用户已通过身份验证。


s
smiles1

对于一个 5 岁的男孩,让他假设他通过父母签署的申请表加入了新学校。在学校管理层批准他的申请后,他会得到一张门禁卡,其中包含以下所有信息,我们可以称之为 CLAIMS 进入学校。

男孩的名字是鲍勃。学校名称是蒙蒂索里高中班是 8 年级

上学第一天,当他走进学校时,他刷了他的门禁卡,大门打开了,这意味着他已经被声称是学校的一员。通过这种方式,他是一个认证的人进入学校。

到达他的班级后,他使用门禁卡进入每个班级,但在 8th Standard Class 门打开了,因为他声称来自 8th Standard。

在学校,他只被授权进入他的班级,因为他现在正在学习 8th Standard。如果他尝试进入第六标准,学校老师不会授权他。


这只是描述了身份验证和授权的一般概念。不是特别基于索赔或其他
笨蛋,这些说法肯定是因为他是 8 年级的学生并且被拒绝进入 6 年级吗?
我读了这篇文章,似乎基于声明的身份验证是第 3 方身份验证系统,如开放身份验证或社交登录,如 Microsoft 帐户、Facebook、Twitter、谷歌。任何人都可以告诉我基于声明的身份验证与开放身份验证有何不同?因为 open auth 太 3rd 方身份验证系统。
S
Sinaesthetic

尽可能非技术性:

如果你要描述关于你是谁以及你被允许看到或做什么的任何事情,那么这些事情中的每一个都将是你“声称”为真实的事情,因此该列表中的每个“事情”都将是“宣称”。

每当你告诉某人一些关于你自己的事情或“声称”你被允许看到或做某事时,你都会把你的声明清单交给他们。他们将与权威机构核实您的声明是否属实,如果属实,他们将相信该声明清单上的任何内容。因此,如果您声称自己是布拉德皮特,您的声明清单显示您是布拉德皮特,并且经过权威机构验证,您的声明都是真实的——那么他们会认为您是布拉德皮特以及该列表中的其他任何内容。

声称:你声称是真实的。这可以是一条信息或您声称拥有的权限的描述。您向其提出索赔的系统只需要了解索赔是/意味着什么,并且还能够与当局核实。

权威:将您的声明列表放在一起并签名的系统,基本上说“根据我的授权,此列表中的所有内容都是真实的”。只要读取声明的系统可以通过权威验证签名是正确的,那么声明列表中的所有内容都将被认为是真实的。

此外,我们不要将其称为“基于声明的身份验证”,而是将其称为“基于声明的身份”。

技术性稍强:

因此,现在在此过程中,您使用某种机制(用户名/密码、客户端密码、证书等)进行身份验证,并为您提供一个令牌,证明您就是您所说的那个人。然后,您将该访问令牌换成 ID 令牌。该过程将使用您的身份来查找和构建声明列表,对其进行签名,然后将包含您所有声明的 ID 令牌交还给您。

作为授权步骤,根据其实施方式,资源将查看您的 ID 令牌(声明),然后检查您是否具有访问该资源所需的声明。

因此,例如,如果资源“CastleBlack/CommandersTower”说“你必须有权访问黑色城堡并成为领主指挥官,那么它将查看你的声明列表,看看这两件事是否属实。

如您所见,“声明”可以是任何东西。它可以是一个角色,它可以是一个事实,它可以是一面旗帜。它只是一个键值对列表,“值”是可选的。有时只是看看索赔是否存在:

claims : [
    {"type": "name", "value": "Jon Snow"},
    {"type": "home", "value": "Winterfell, The North, Westeros"},   
    {"type": "email", "value": "jon@nightswatch-veterans.org"},
    {"type": "role", "value": "veteran;deserter;"},
    {"type": "department", "value": "none"},    
    {"type": "allowEntry", "value": "true"},
    {"type": "access", "value": "castleblack;eastwatch;"}
]

因此,如果 Jon 登录并尝试访问上述资源,他将被拒绝,因为虽然他是他所说的那个人并且他确实可以访问城堡黑色,但他不再是指挥官,也没有明确的访问权限统帅塔,因此不能隐式进入统帅之塔。

更具体地说,“CastleBlack”可能是一个[更大的]范围,每个区域都有一个特定的权限,但这是一个不同的讨论。

每个应用程序处理访问的方式将有所不同,但它将使用声明来完成。


这里不再投票了吗?我认为这是一个完美的答案,因为我正在寻找关于如何将索赔信息传递给我的 Angular 应用程序的“实际”示例。这里的答案回答了这两个问题(如何保护 api,如何通知其他软件/客户端/SPA 使用该信息)。谢谢!
N
NJH

考虑到声明是一个属性,它告诉您有关用户的一些信息(姓名、年龄、种族等),您使用安全令牌服务来验证这些声明,并将它们用于身份验证之外的授权。

以下摘录摘自 Wikipedia (http://en.wikipedia.org/wiki/Claims-based_identity),这是我迄今为止找到的最好的类比

“为了更好地理解安全令牌服务的概念,可以考虑将夜总会与门卫进行类比。门卫想要阻止未成年顾客进入。为此,他要求顾客出示驾驶执照、健康保险卡或由省或州车辆执照部门、卫生部门或保险公司等受信任的第三方(安全令牌服务)颁发的其他身份证明(令牌)。因此减轻了夜总会确定顾客身份的责任年龄。它只需要信任发行机构(当然还要自己判断所提供的代币的真实性)。完成这两个步骤后,夜总会就成功地验证了顾客的身份。法定饮酒年龄。

继续打个比方,夜店可能有会员制,某些会员可能是普通会员,也可能是VIP。门卫可能会要求另一个象征物,即会员卡,这可能会提出另一个要求;该会员是VIP。在这种情况下,代币的可信发行机构可能是俱乐部本身。如果会员卡声称顾客是 VIP,那么俱乐部可以做出相应的反应,将经过验证的 VIP 会员资格声明转化为许可,例如允许顾客坐在专属休息区并获得免费饮料。”


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅