您如何要求 IdentityServer 4 在不登录的情况下更新声明?

How do you ask IdentityServer 4 to update claims without logging in?

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

比如我有一个类型为'video_viewer_role'的声明,指定后,判断当前身份是否可以在网站上观看视频。这个想法是我可以通过声明打开和关闭此功能,包括匿名用户。

所以,我想要的是让我的 Controller Action 调用 IdentityServer 并询问当前用户是否有声明,但不触发身份验证过程。因此,如果用户未通过身份验证,我将获得 "video_viewer_role" 的最新声明值,具体取决于它在支持身份服务器的声明存储中的设置。

这可能吗?

你可能应该阅读这篇文章...... https://leastprivilege.com/2016/12/16/identity-vs-permissions/ 在你走得太远将身份与权限混淆之前。

理想情况下,您不应提供有关权限的声明 ('can_view_video'),尤其是在会话过程中该权限会发生变化的情况下。声明应该模拟用户的身份,而不是他们可以做的事情。然后,靠近您的受保护资源,您可以使用该身份验证用户是否有权执行他们正在尝试执行的操作(即观看视频)。

编辑: 恕我直言,这听起来仍然不是正确的机制。声明对用户的身份进行建模,因此尝试对匿名用户使用声明是没有意义的......你唯一能说的就是他们是匿名的。

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

这会删除声明中的权限,并允许您根据您的设置方式为经过身份验证的用户 and/or 匿名用户控制权限。