好吧,这不完全适合5岁的孩子,但是请避免使用流行语,如果可能的话,企业不要说话。
基于声明的身份验证现在似乎风行一时,但是我无法找到一个简单而扎实的解释,它实际上是什么,它与我们现在有什么不同(我假设“我们现在有什么”)成为基于角色的身份验证),使用它的好处是什么,等等。
好吧,这不完全适合5岁的孩子,但是请避免使用流行语,如果可能的话,企业不要说话。
基于声明的身份验证现在似乎风行一时,但是我无法找到一个简单而扎实的解释,它实际上是什么,它与我们现在有什么不同(我假设“我们现在有什么”)成为基于角色的身份验证),使用它的好处是什么,等等。
Answers:
@Marnix有一个很好的答案,但是要脱离其技术方面:
基于声明的身份验证是关于定义信任的人,以便为您提供有关身份的准确信息,并且仅使用提供的信息。我的首选示例在酒吧。想象一下,您想在酒吧喝啤酒。理论上,酒保应要求您提供年龄证明。你如何证明呢?好吧,一种选择是让酒保将您切成两半并计算戒指的数量,但是这样做可能会出现一些问题。另一个选择是让您将生日记录在调酒师批准或不赞成的纸上。第三种选择是去政府,领取身份证,然后向酒保出示身份证。
有些人可能会嘲笑只将生日写在纸上的想法,但这就是在您对应用程序内部的用户进行身份验证时发生的事情,因为调酒师(或您的应用程序)要信任纸条。但是,我们相信政府的说法,即身份证上的生日有效,并且该身份证适用于要求喝酒的人。出于所有意图和目的,调酒师(或应用程序)实际上并不关心由于信任而如何进行身份验证。酒保除了您的生日外,对您一无所知,因为这就是酒保所需要知道的。现在,调酒师可以存储他们认为对他们很重要的信息,例如您最喜欢的饮料,但是政府不在乎(因为它不是权威来源),
CBA的关键是“谁是身份的权威来源?”
(这是我个人的看法,其他人可能会有所不同。请另发表其他观点作为单独的答案。)
基于声明的身份/身份验证/授权是通过将身份验证/授权转变为单独的(网络)服务,将维护用户授权和用户登录从(Web)应用程序中分离出来。
因此,例如,当我第一次浏览到启用了声明的Web应用程序时,它将把我的浏览器重定向到它信任的“登录服务”。我将对该服务进行身份验证(使用Windows身份验证,智能卡或其他方式),并作为响应将其发送回“令牌”,浏览器将其发送回Web应用程序。现在,Web应用程序检查令牌是否由其受信任的登录服务进行了数字签名,然后查看令牌中的“声明”。纯粹基于这些主张,应用程序可以确定为用户提供的功能。
声明几乎总是包含用户的身份,经常还会有与授权相关的声明(“此用户可以查看销售数据,但不能更新它”),有时还包括其他信息(“鞋号= 42”)。
关键点在于,应用程序不知道也不关心用户如何通过身份验证,也不知道如何管理授权:它仅使用来自已签名令牌中声明的信息来确定用户是谁和/或用户可能是什么。查看或执行和/或关于用户的任何其他信息。
(是的,我假设这里是一个非常聪明且消息灵通的5岁孩子。:-)
以下真实示例摘自《基于声明的身份和访问控制指南》(第二版)。
一个非常熟悉的类比是每次访问机场时都要遵循的身份验证协议。您不能简单地走到大门口出示护照或驾照。相反,您必须首先在售票柜台办理登机手续。在这里,您将提供任何有意义的凭证。如果您要出国,请出示护照。对于国内航班,您需要出示驾驶执照。在确认您的照片ID与您的头像相匹配(身份验证)之后,代理会查询您的航班并验证您是否已购买机票(授权)。假设一切井井有条,您会收到登机牌,然后登机。
一个登机牌是非常丰富的。登机口服务人员知道您的姓名和飞行常客号码(身份验证和个性化),航班号和座位优先级(授权),甚至可能更多。登机口代理拥有有效完成工作所需的一切。
登机牌上还有特殊信息。它被编码在条形码和/或背面的磁条中。该信息(例如登机序列号)证明该通行证是航空公司签发的,不是伪造的。
本质上,登机牌是航空公司关于您的已签署的一系列索偿要求。它指出允许您在特定时间登上特定航班并坐在特定座位上。当然,座席不需要对此进行深入思考。他们只是验证您的登机牌,阅读其中的声明,然后让您登机。
同样重要的是要注意,获取登机牌的签名申请可能有多种方式。您可以去机场的售票柜台,或者可以使用航空公司的网站并在家打印登机牌。登机的登机口人员并不关心如何创建登机牌;只要航空公司信任您,他们就不会在意您使用哪个发行人。他们只关心这是一组真实的声明,可以使您获得上飞机的许可。
在软件中,此声明包称为安全令牌。每个安全令牌均由创建它的发行者签名。如果基于用户声明的应用程序提供了来自受信任发行者的有效,经过签名的安全令牌,则认为该用户已通过身份验证。
对于一个5岁的男孩,请他的父母签署申请表,让他假设自己加入了新学校。在获得学校管理部门的批准后,他获得了一张访问卡,其中包含以下所有信息,我们称其为进入学校的要求。
在他上学的第一天,他走进学校,刷了门禁卡,门开了,这意味着他已经被人认出是学校里的一个人。这样,他便是进入学校的授权人员。
上完课后,他用门禁卡进入了每个班级,但由于他声称自己是第8级标准,因此在第8级标准舱中打开了门。
在学校里,他只有被授权进入他的班级,因为他正在学习8级标准。如果他尝试进入6级标准,学校的老师将不会授权他。
尽可能非技术性的:
如果您要描述有关自己的身份以及被允许看到或做的事情的任何事情,那么这些事情中的每一项都将被您“宣称”为真实,因此该列表上的每个“事物”都将是“要求”。
每当您告诉某人有关您自己或“主张”的事情时,您都可以看到或做某事,就将他们的主张清单交给他们。他们将授权您核实您的主张是否正确,如果确实如此,他们将相信该主张清单上的任何内容。因此,如果您声称自己是Brad Pitt,则您的索赔清单中说您是Brad Pitt,并且经过权威机构的核实,您的主张都是正确的-那么他们就会相信您是Brad Pitt,该列表中的其他任何内容。
索赔:您声称是真实的。这可以是一条信息,也可以是您声称拥有的权限的描述。您向其提出索赔的系统仅需要了解索赔的含义/含义,并能够与授权机构进行验证。
授权:将您的索赔清单放在一起并签名的系统,基本上说:“根据我的授权,此清单中的所有内容都是真实的。” 只要阅读权利要求的系统可以通过授权验证签名正确,那么权利要求列表中的所有内容都将被视为真实可信。
另外,我们不要将其称为“基于声明的身份验证”,而应将其称为“基于声明的身份”。
技术性稍强:
因此,现在在此过程中,您将使用某种机制(用户名/密码,客户端机密,证书等)进行身份验证,并为您提供一个令牌,证明您是您所说的人。然后,您将该访问令牌替换为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”可能是一个更大的范围,每个区域都有特定的权限,但这是一个不同的讨论。
每个应用程序如何处理访问将有所不同,但是它将使用声明来做到这一点。
考虑到声明是一个属性,它可以告诉您有关用户的一些信息(姓名,年龄,种族等),您可以与安全令牌服务一起使用以验证这些声明,并将它们用于身份验证之外的授权。
以下摘录摘自Wikipedia(http://en.wikipedia.org/wiki/Claims-based_identity),是迄今为止我发现的最好的类比
“为了更好地理解安全令牌服务的概念,请考虑一个夜总会与门卫的类比。门卫要防止未成年顾客进入。为此,他要求顾客出示驾驶证,健康保险卡或由受信任的第三方(安全令牌服务)(例如省或州车辆牌照部门,卫生部门或保险公司)发布的其他标识(令牌),从而减轻了夜总会确定顾客的责任。年龄,只需要信任签发机构(当然可以自己判断所提供的代币的真实性),通过这两个步骤,夜总会就其身份证明了顾客的成功身份法定饮酒年龄。
继续类推,夜总会可能具有会员制,某些会员可能是普通会员或VIP。门卫可能会要求另一个令牌,即会员卡,可能会再次提出索赔。该成员是VIP。在这种情况下,令牌的可信发行机构可能是俱乐部本身。如果会员卡声称顾客是贵宾,则俱乐部可以做出相应的反应,将经过身份验证的VIP会员资格声明转换为许可,例如允许顾客坐在专属休息区并获得免费饮料。”