【发布时间】:2017-09-08 08:25:29
【问题描述】:
我目前正在设置一个带有 Web API 和 MVC UI 的新项目(最终也会有一个可以与相同 API 对话的移动 UI)。
所以,我有以下计划:
- 用户导航到 MVC UI,将他们带到 IdentityServer4 服务器以登录或注册
- 然后将 IdentityServer 用户添加到数据库中应用程序自己的用户表中
- 然后可以对用户设置权限以限制他们的访问权限
这意味着身份服务器就是这样,身份服务器(意味着我允许人们通过 Google 等登录,而不用担心他们的角色和权限)。
所以,为了实现上述目的,我需要检查用户对 API 的权限,而不是客户端(客户端可以是任何东西 - 网络、手机应用程序、JavaScript 客户端等,所以我们不能依赖它处理用户权限)。
在 API 上,我实现了 Permissionhandler 和 PermissionRequirement 授权策略。因此,在 API 控制器或方法上,我可以执行以下操作:[Authorize(Policy = "CreateUser")]。看来我需要为每个系统权限制定一个策略。
所以在授权处理程序中我需要:
- 获取当前用户的用户名
- 如果它们存在于应用数据库中,请检查它们的权限并进行身份验证或拒绝
- 如果它们在应用数据库中不存在,请添加它们,然后我们可以稍后从管理面板设置它们的权限
在我尝试从身份服务器请求用户的用户名之前,这一切进展顺利。我知道我需要使用 UserInfoClient 来执行此操作,但我不知道如何使用用户的令牌/凭据从身份服务器获取他们的声明或至少获取他们的 User.Identity.Name。
现在我可以只使用子 ID 将用户添加到应用程序数据库,但是管理权限的人将不知道那个人是谁,所以我需要使用他们的电子邮件。
现在在 MVC 客户端中,我可以毫无问题地看到 User.Identity.Name,但在 API 中该值为 null!?
所以我的问题是:到底如何从 API 中获取当前用户的 Identity.Name、用户名或电子邮件?
谢谢。
【问题讨论】:
标签: c# asp.net-mvc api permissions identityserver4