我目前正在使用Web API和MVC UI设置一个新项目(最终还会有一个移动UI以及可以与同一个API通信)。IdentityServer4 - API上的用户权限
所以,我有以下计划:
- 用户导航到MVC UI这需要它们放到IdentityServer4服务器登录或注册
- IdentityServer用户,然后添加到应用程序自己数据库中的user表
- 权限就可以对用户进行设置,以限制他们的访问
这意味着身份的服务器就是这样,标识服务器(和我我允许人们通过谷歌等登录,而不用担心他们的角色和权限)。因此,要实现上述目标,我需要检查用户对API的权限,而不是客户端(客户端可能是任何东西 - web,电话应用程序,JavaScript客户端等等,所以我们不能依赖于处理用户权限)。
在API上,我实现了Permissionhandler和PermissionRequirement授权策略。因此,在API控制器或方法上,我可以执行如下操作:[Authorize(Policy =“CreateUser”)]。看起来我需要为每个系统授予一个策略权限。
所以在授权处理我需要:
- 获取当前用户的用户名
- 如果他们在应用程序数据库中存在,检查他们的权限和身份验证或拒绝
- 如果他们不这样做存在于应用程序数据库中,添加它们,然后我们可以稍后从管理面板设置他们的权限
这是很好的,直到我试图从身份s请求用户的用户名erver。我知道我需要使用UserInfoClient来做到这一点,但我不知道如何使用用户的令牌/凭据从身份服务器获取他们的声明或至少获得他们的User.Identity.Name。
现在我可以使用子ID将用户添加到应用程序数据库中,但是管理权限的人不知道该人是谁,所以我需要真正使用他们的电子邮件。
现在在MVC客户端中,我可以看到没有任何问题的User.Identity.Name,但在API中该值为空!
所以我的问题是:我如何从API中获取当前用户的Identity.Name,用户名或电子邮件?
谢谢。
我在我的应用程序的其他层(即其他项目中)我的授权处理,所以我没有获得那样的HttpContext。我可以访问AuthorizationHandlerContext,但不知道我可以访问HttpContext吗?我可能是错的。 – Craig