Ant*_*lev 182 terminology claims-based-identity
嗯,不完全是一个5岁的孩子,但如果可能请避免使用流行语和企业语.
基于声明的身份验证现在似乎风靡一时,但我找不到一个简单而实际的解释,它实际上是什么,它与我们现在的不同(我假设"我们现在拥有的")基于角色的身份验证),使用它有什么好处,等等.
Ste*_*eve 209
@Marnix有一个很好的答案,但要远离它的技术方面:
基于声明的身份验证旨在定义您信任的人,以便为您提供有关身份的准确信息,并且仅使用提供的信息.我的例子是在酒吧.想象一下,你想在酒吧喝啤酒.从理论上讲,调酒师应该要求您提供年龄证明.你是如何证明的?好吧,一个选择是让调酒师把你减半并计算戒指的数量,但可能存在一些问题.另一种选择是让你在一张纸上写下你的生日,酒保赞同或不赞成.第三种选择是去政府,获得身份证,然后将身份证提交给调酒师.
有些人可能会嘲笑只是在一张纸上写下你的生日,但这就是你在应用程序本身中对用户进行身份验证时所发生的事情,因为这是由调酒师(或你的应用程序)来信任这张纸.但是,我们相信政府声称身份证上的生日是有效的,而身份证则是请求饮酒的人.出于所有意图和目的,调酒师(或应用程序)并不真正关心由于信任而如何进行身份验证.除了你的出生日期之外,调酒师对你一无所知,因为那是调酒师需要知道的全部内容.现在,调酒师可以存储他们认为对他们很重要的信息,比如你最喜欢的饮料,但是政府并不关心(因为它不是权威来源),所以调酒师以他自己的方式存储这些信息.
CBA的关键是"谁是身份的权威来源?"
Mar*_*ica 128
(这是我个人对此的看法,其他人可能会有所不同.请将其他观点作为单独答案发布.)
基于声明的身份/认证/授权是通过将认证/授权转换为单独的(web)服务来将用户授权的维护和用户登录从(web)应用程序中分离出来.
例如,当我第一次浏览启用声明的Web应用程序时,它会将我的浏览器重定向到它信任的"登录服务".我将对该服务进行身份验证(使用Windows身份验证,智能卡或其他),作为响应,它会发回一个"令牌",浏览器会将该令牌发送回Web应用程序.现在,Web应用程序检查该令牌是否由其受信任的登录服务进行数字签名,然后查看令牌中的"声明".纯粹基于这些声明,应用程序决定用户提供的功能.
声明几乎总是包括用户的身份,通常还有与授权相关的声明('此用户可以查看销售数据,但不能更新它'),有时也包括其他信息('鞋码= 42').
关键点在于应用程序不知道也不关心用户如何进行身份验证,也不管如何管理授权:它仅使用签名令牌中的声明信息来确定用户是谁和/或用户可能查看或执行和/或有关用户的任何其他信息.
(是的,我假设一个非常聪明且知情的5岁孩子.:-)
Mar*_*ari 39
以下真实示例来自基于声明的身份和访问控制指南(第2版).
一个非常熟悉的类比是您每次访问机场时遵循的身份验证协议.您不能简单地走到大门并出示您的护照或驾驶执照.相反,您必须先在售票柜台办理登机手续.在这里,您展示任何有意义的凭证.如果你要去海外,你出示护照.对于国内航班,您出示驾驶执照.在验证您的图片ID与您的面部(身份验证)匹配后,代理会查找您的航班并验证您是否已支付了机票(授权).假设一切正常,您会收到一张登机牌.
一个登机牌是非常丰富的.登机口代理知道您的姓名和常旅客号码(身份验证和个性化),您的航班号和座位优先权(授权),甚至可能更多.门代理拥有他们有效完成工作所需的一切.
登机牌上还有特殊信息.它编码在条形码和/或背面的磁条上.该信息(例如登机序列号)证明该通行证是由航空公司签发的,并非伪造.
从本质上讲,登机牌是航空公司对您提出的一系列签名声明.它声明允许您在特定时间登上特定航班并坐在特定座位上.当然,代理商不需要对此深入思考.他们只是验证您的登机牌,阅读其上的索赔,并让您登机.
同样重要的是要注意,获得签署的一套索赔可能有多种方式,这是您的登机牌.您可以去机场的售票柜台,也可以使用航空公司的网站在家打印登机牌.登机的登机代理人并不关心如何创建登机牌; 他们不关心您使用哪个发行人,只要它受到航空公司的信任.他们只关心这是一套真实的声明,允许你上飞机.
在软件中,此捆绑声称为安全令牌.每个安全令牌都由创建它的发行者签名.基于声明的应用程序认为用户如果从受信任的颁发者提供有效的签名安全令牌,则需要进行身份验证.
小智 18
对于一个5岁的男孩,请他假设他通过父母签署申请来加入新学校.在获得学校管理层的批准后,他获得了一张访问卡,其中包含以下所有信息,我们可以将其称为索赔,以便进入学校.
在他上学的第一天,当他走进学校时,他刷了门禁卡并打开了大门,这意味着他已被宣称为学校的一员.通过这种方式,他是一名进入学校的认证人员.
到达他的班级后,他使用门禁卡进入每个班级,但在8号标准舱门打开,因为他声称是从第8标准.
在学校里,他只是授权进入他的班级,因为他正在学习第8个标准.如果他试图进入第六标准,学校老师将不会授权他.
尽可能不技术:
如果你要描述任何关于你是谁以及你被允许看到或做什么的事情,那么每一件事都是你"声称"是真实的,因此该名单上的每个"事物"都是"要求".
无论何时,当您告诉别人某些关于您自己的事情或"声称"您被允许查看或做某事时,您都可以将他们的索赔清单交给他们.他们将与权威机构核实您的声明是否属实,如果是,他们会相信该声明列表中的任何内容.因此,如果你声称自己是布拉德皮特,那么你的索赔清单就说你是布拉德皮特,并且有权威证实你的说法都是真的 - 那么他们会认为你是布拉德皮特和该列表中的任何其他内容.
声明:您声称是真实的.这可以是您要求拥有的许可的一条信息或描述.您提出索赔的系统只需要了解索赔是什么/意味着什么,并且还能够与权威机构进行核实.
权限:将您的权利要求列表放在一起并签名的系统,基本上说"在我的权限下,此列表中的所有内容都是正确的".只要阅读权利要求的系统可以向权威机构验证签名是否正确,那么权利要求列表中的所有内容都将被认为是真实的和真实的.
另外,我们不要将其称为"基于声明的身份验证",而是将其称为"基于声明的身份".
技术略有提升:
因此,现在在此过程中,您使用某种机制(用户名/密码,客户端密钥,证书等)进行身份验证,并为您提供证明您就是您所说的人的令牌.然后,您将该访问令牌换成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;"}
]
Run Code Online (Sandbox Code Playgroud)
因此,如果Jon登录并尝试访问上述资源,他将被拒绝,因为虽然他是他所说的他并且他确实可以访问城堡黑,但他不再是领主,也没有明确的访问权限指挥官的塔,因此不能含蓄地进入领主指挥官的塔.
更具体地说,"CastleBlack"可能是一个[更大]的范围,每个区域都是一个特定的许可,但这是一个不同的讨论.
每个应用程序如何处理访问权限将会有所不同,但它会使用声明来执行此操作.
考虑到声明是告诉您某些用户信息(名称,年龄,种族等)的属性,您使用安全令牌服务来验证这些声明,并将其用于除身份验证之外的授权.
以下摘录摘自维基百科(http://en.wikipedia.org/wiki/Claims-based_identity)及其迄今为止我发现的最佳类比
"为了更好地理解安全令牌服务的概念,可以考虑一个带门卫的夜总会的类比.门卫希望防止未成年的顾客进入.为了方便这一点,他要求一位顾客出示驾驶执照,健康保险卡或者由受信任的第三方(安全令牌服务)发出的其他身份证明(令牌),例如省或州车辆执照部门,卫生部门或保险公司.夜总会因此减轻了确定顾客的责任.它只需要信任发证机关(当然要对所提供的令牌的真实性做出自己的判断).通过完成这两个步骤,夜总会已成功验证了顾客对他或她所声称的声称.法定饮酒年龄.
继续比喻,夜总会可能有会员制,某些会员可能是常客或贵宾.门卫可能会要求另一个令牌,即会员卡,可能会提出另一个要求; 该成员是VIP.在这种情况下,令牌的受信任发布机构可能是俱乐部本身.如果会员卡声称赞助人是贵宾,那么俱乐部可以做出相应的反应,将经过认证的VIP会员权利要求转换为许可,例如允许顾客坐在专属休息区,并享用免费饮料.