2017-05-25 58 views
0

我希望能够打开和关闭我的网站的某个区域的保护。我使用IdentityServer来填充MVC应用程序中的声明,从而确定访问功能。如何让IdentityServer 4在未登录的情况下更新声明?

例如,我有一个类型为'video_viewer_role'的索赔,当指定时,它确定当前的身份是否可以在网站上观看视频。我的想法是,我可以通过索赔来开启和关闭此功能,包括匿名用户。

所以,我想要的是我的控制器操作调用IdentityServer并询问当前用户是否有索赔,但没有触发认证过程。因此,如果用户未通过身份验证,则会根据支持身份服务器的声明存储中设置的内容获取“video_viewer_role”的最新声明值。

这可能吗?

回答

3

您应该阅读此... https://leastprivilege.com/2016/12/16/identity-vs-permissions/,然后沿着混合权限身份的路线走得太远。

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

编辑: 它仍然听起来像索赔是不正确的机制,恕我直言。声明模拟了用户的身份,因此尝试为匿名用户使用声明是没有意义的......唯一可以说的是他们是匿名的。

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

这会将权限从权限中移除,并且允许您控制权限以验证用户和/或取决于你如何设置匿名用户。

+0

Hey Mashton。感谢您的回应。这并不意味着会话期间“can_view_video”标志将会改变。相反,我希望标志能够切换匿名用户是否可以访问特定资源。我可能想为用户打开和关闭一个功能,具体取决于它的成功程度。我真正想要的是能够向匿名用户授予索赔! –

+0

我已更新该问题以提供一点清晰度 –

+0

请参阅编辑以回答 – Mashton

相关问题