解释“基于声明的认证”;对一个5岁的孩子

当然,这并不完全是对一个5岁的孩子说的,但如果可能的话,请避免流行词和企业用语。

基于声明的身份验证现在似乎很流行,但我找不到一个简单而接地气的解释来解释它到底是什么,它与我们现在拥有的身份验证有什么不同(我假设“我们现在拥有的”是基于角色的身份验证),使用它的好处是什么,等等。

40008 次浏览

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

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

例如,当我第一次浏览到一个支持索赔的web应用程序时,它会将我的浏览器重定向到它信任的“登录服务”。我将对该服务进行身份验证(使用Windows身份验证,智能卡或其他任何方式),作为响应,它将返回一个“令牌”,浏览器将其发送回web应用程序。现在,web应用程序检查令牌是否由其受信任的登录服务进行数字签名,然后查看令牌中的“声明”。应用程序完全根据这些声明来决定向用户提供什么功能。

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

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

(是的,我猜这是一个非常聪明、见多识广的5岁孩子。: -)

@Marnix有一个很好的答案,但先不谈技术方面的问题:

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

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

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

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

  1. 这个男孩的名字叫鲍勃。
  2. 学校的名字是蒙台梭利高中
  3. 班级是八年级

在他上学的第一天,当他走进学校时,他刷了他的门禁卡,大门打开了,这意味着他已经被认作是学校的人之一。这样他就是一个被认证的人进入学校。

到达他的班级后,他使用门禁卡进入每个班级,但在第八标准班,门打开了,因为他声称来自第八标准班。

在学校里,他只被授权进入他的班级,因为他现在正在学习8级标准。如果他试图进入六年级,学校老师不会批准他。

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

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

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

继续类比,夜总会可能有会员制度,某些会员可能是普通会员或VIP会员。门卫可能会要求另一种标志,会员卡,这可能会有另一种要求;这位会员是VIP。在这种情况下,令牌的可信发行机构可能是俱乐部本身。如果会员卡声称顾客是VIP,那么俱乐部就可以做出相应的反应,将经过认证的VIP会员声明转换为许可,例如允许顾客坐在专属休息区并获得免费饮料。”

下面的真实例子取自基于索赔的身份和访问控制指南(第二版)

一个非常熟悉的类比是您遵循的身份验证协议 当你访问一个机场。你不能就这么走到门口 出示你的护照或驾照。相反,你必须先 在售票处办理登机手续。在这里,你可以出示任何证书 是有意义的。如果你要出国,请出示护照。为 国内航班,你出示驾照。后验证 你的照片ID匹配你的脸(身份验证),代理 查询你的航班并确认你是否已经付了钱 (授权)。假设一切就绪,你会收到一张登机牌

A 登机牌是非常有用的。门 代理商知道你的名字和常旅客号码(认证和 个性化),您的航班号和座位优先级 (授权),甚至更多。登机口的工作人员 他们需要的一切来高效地完成他们的工作。

There is also 登机牌上的特殊信息。它被编码在条中 代码和/或背面的磁条。这一信息(如 登机序列号)证明该通行证是由

本质上,一张登机牌是有签名的 航空公司对你提出的索赔。它表明你是 允许在特定的时间登上特定的航班并坐在特定的座位上 特定的座位。当然,代理人不需要深入思考 关于这个。他们只是验证你的登机牌,阅读声明

同样重要的是要注意 可能有不止一种方法可以获得已签署的索赔要求集 这是您的登机牌。你可以去车站的售票处 你也可以在航空公司的网站上打印你的 登机牌在家里。登机的登机口工作人员并不在乎 登机牌是如何制作的;他们不在乎你是哪个发行人 只要得到航空公司的信任,就可以使用。他们只关心它 一组真实的声明是否允许你进入 飞机。< / p >

在软件中,这组声明称为安全令牌。每一个 安全令牌是创建它的出具人签字。< em >声明 如果用户提供有效的、 来自可信发行者的签名安全令牌.

..

尽可能非技术性:

如果你要描述你是谁,你被允许看到或做什么,每一件事情都是你“声称”是真实的,因此清单上的每一件“事情”都是一个“声称”。

每当你告诉别人一些关于你自己的事情,或者“声称”你被允许看或做某事,你就把你的声明清单递给他们。他们会向权威机构核实你的说法是否属实,如果属实,他们就会相信清单上的任何说法。所以如果你声称你是布拉德·皮特,你的声明清单上写着你是布拉德·皮特,并且经权威机构证实你的声明都是真的——那么他们就会相信你是布拉德·皮特,以及清单上的其他任何东西。

索赔:你声称的是真的。这可以是一条信息,也可以是你声称拥有的权限的描述。提交索赔要求的系统只需要了解索赔要求是什么/意味着什么,并且能够与权威机构进行验证。

权威:将你的索赔清单放在一起并签署的系统,基本上是说“根据我的权威,这个列表中的所有内容都是真实的。”只要读取权利要求的系统可以向权威机构验证签名是正确的,那么权利要求列表中的所有内容都将被认为是真实的。

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

稍微更专业一点:

所以现在在这个过程中,你进行身份验证使用某种机制(用户名/密码,客户端秘密,证书等),这给你一个令牌,证明你是谁,你说你是谁。然后,将该访问令牌交换为ID令牌。该过程将使用您的身份来查找并建立索赔清单,签名,然后将包含您所有索赔的ID令牌交还给您。

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

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

如你所见,“声称”可以是任何东西。它可以是角色,可以是事实,也可以是标志。它只是一个键值对的列表,“value”是可选的。有时,这只是为了看看声明是否存在:

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;"}
]

所以如果琼恩登录并尝试访问上面描述的资源,他将会被拒绝,因为虽然他是他所说的那个人,他确实可以访问黑城堡,但他不再是领主指挥官,也没有明确的访问指挥官塔的权限,因此不能含蓄地进入领主指挥官塔。

更具体地说,“CastleBlack”可能是一个更大的范围,每个领域都是一个特定的许可,但这是另一个讨论。

每个应用程序处理访问的方式是不同的,但它将使用声明来做到这一点。