Identityserver4 您如何要求IdentityServer 4在不登录的情况下更新索赔?

Identityserver4 您如何要求IdentityServer 4在不登录的情况下更新索赔?,identityserver4,Identityserver4,我希望能够打开和关闭对我的网站的某一特定区域的保护。我使用IdentityServer填充MVC应用程序上的声明,从而确定访问能力 例如,我有一个类型为“video\u viewer\u role”的声明,该声明在指定时确定当前身份是否可以在网站上查看视频。我的想法是,我可以通过声明打开和关闭此功能,包括匿名用户 因此,我希望控制器操作调用IdentityServer并询问当前用户是否有声明,但不触发身份验证过程。因此,如果用户未通过身份验证,我将获得“video_viewer_role”的最新

我希望能够打开和关闭对我的网站的某一特定区域的保护。我使用IdentityServer填充MVC应用程序上的声明,从而确定访问能力

例如,我有一个类型为“video\u viewer\u role”的声明,该声明在指定时确定当前身份是否可以在网站上查看视频。我的想法是,我可以通过声明打开和关闭此功能,包括匿名用户

因此,我希望控制器操作调用IdentityServer并询问当前用户是否有声明,但不触发身份验证过程。因此,如果用户未通过身份验证,我将获得“video_viewer_role”的最新声明值,具体取决于在支持identity server的声明存储中设置的值


这可能吗?

您可能应该读一下。。。在你将身份和权限混为一谈之前

理想情况下,您不应该提供有关权限(“can_view_video”)的声明,特别是如果在会话过程中权限将发生变化。声明应该是对用户的身份进行建模,而不是对用户可以做的事情进行建模。然后,在您的受保护资源附近,您可以使用该身份验证用户是否有权限执行他们尝试执行的操作(即查看视频)

编辑: 这听起来似乎不是正确的机制。声明为用户的身份建模,因此尝试为匿名用户使用声明是没有意义的。。。关于他们,你唯一能说的就是他们是匿名的

你说你要“打开/关闭功能”,大概是通过数据库,那么为什么不让权限检查机制只检查你的数据库呢?您可以为控制器(“RequiresVideoViewerPermissions”)创建一个属性,用于检查数据库中您是如何限制视频访问的。例如,您可以在数据库中设置一个名为“VideoViewerRequiredRole”的设置,然后将其值设置为role,或者如果希望所有人都能查看它,则将其设置为null。例如,您登录的用户可能具有“MyAppUser”角色,管理员可能具有“MyAppAdmin”角色等


这将从声明中删除权限,并允许您根据设置方式对经过身份验证的用户和/或匿名用户进行控制。

您可能应该阅读此。。。在你将身份和权限混为一谈之前

理想情况下,您不应该提供有关权限(“can_view_video”)的声明,特别是如果在会话过程中权限将发生变化。声明应该是对用户的身份进行建模,而不是对用户可以做的事情进行建模。然后,在您的受保护资源附近,您可以使用该身份验证用户是否有权限执行他们尝试执行的操作(即查看视频)

编辑: 这听起来似乎不是正确的机制。声明为用户的身份建模,因此尝试为匿名用户使用声明是没有意义的。。。关于他们,你唯一能说的就是他们是匿名的

你说你要“打开/关闭功能”,大概是通过数据库,那么为什么不让权限检查机制只检查你的数据库呢?您可以为控制器(“RequiresVideoViewerPermissions”)创建一个属性,用于检查数据库中您是如何限制视频访问的。例如,您可以在数据库中设置一个名为“VideoViewerRequiredRole”的设置,然后将其值设置为role,或者如果希望所有人都能查看它,则将其设置为null。例如,您登录的用户可能具有“MyAppUser”角色,管理员可能具有“MyAppAdmin”角色等


这将从声明中删除权限,并允许您根据设置方式对经过身份验证的用户和/或匿名用户进行控制。

Hey Mashton。谢谢你的回复。这并不意味着“can_view_video”标志会在会话期间更改。相反,我希望一个标志能够切换匿名用户是否有权访问特定资源。我可能想为用户打开和关闭一个功能,这取决于它的成功程度。我真正想要的是能够向匿名用户授予索赔权!我已经更新了这个问题,以提供一点澄清。谢谢马什顿。我相信这个论点。谢谢你的澄清。[我忍不住认为Asp.Net中声明的体系结构不鼓励人们正确思考这些东西]。很容易走上错误的道路,而且当声明开始包含诸如“角色”之类的内容时,很容易就会走上滑梯。但实际上,“声明”是关于经过身份验证的用户的身份:他们的出生日期、姓名、电子邮件地址、所在部门等。从这些声明中,您可能希望了解授权决策(例如,只有X部门的人才能访问此信息),但这不同于专门详细说明权限的声明。我现在肯定更清楚了。谢谢你,马什顿。我有一个相关的问题,但为了清楚起见,我将开始一个新问题。嘿,马什顿。谢谢你的回复。这并不意味着“can_view_video”标志会在会话期间更改。相反,我希望一个标志能够切换匿名用户是否有权访问特定资源。我可能想为用户打开和关闭一个功能,这取决于它的成功程度。我真正想要的是能够向匿名用户授予索赔权!我已经更新了这个问题,以提供一点澄清。谢谢马什顿。我相信这个论点。谢谢你的澄清。[我忍不住认为Asp.Net中声明的体系结构不鼓励人们正确思考这些东西]。很容易走上错误的道路,而且当声明开始包含诸如“角色”之类的内容时,很容易就会走上滑梯。