WebAPI保护的资源,用于添加/编辑/删除方案

时间:2015-09-07 10:34:09

标签: c# .net authentication asp.net-web-api owin

我在WebAPI的IIS上托管了以下设置OWIN token authentication,其中包含以下方案:

  • 用户拥有个人资源,例如,只有他们可以编辑的个人资料;
  • 在我的应用程序中,我通过随机生成的ID;
  • 来识别用户
  • 我将此ID保留在前端,API的请求包含

现在我想确保并authorize编辑个人资源的请求,以便只有所有者(例如,其个人资料所在的用户)才能修改任何字段。

在修改此资源的请求到达之后,我想检查调用者(取自请求)是否与HttpContext中的调用者相同(因此有人修改了他的请求中的公共可用ID)被拒绝编辑命令。)

请记住,在我的请求中,我保留了用户的ID,而HttpContext.Current.User.Identity包含了该电子邮件。此时,我可以调用用户管理器并使用HTTPContext的电子邮件在数据库中搜索用户,并检查ID是否相等。但这要求我在开始实际执行命令之前对数据库提出质疑(因此从性能的角度来看并不完美)。

我是否可以使用HttpContext填充ID(包括电子邮件或将Name属性从User.Identity更改为ID),以便我可以有类似HttpContext.User.Identity.Id的东西(因为我认为我不能修改那个对象 - 显而易见的原因)?或HttpContext.User.Identity.Name给我ID

或者在HttpContext内使用WebAPI是否可以?

谢谢, 拉杜

编辑:在API电话会议期间环顾当地人之后,我遇到了几个可以检索身份的地方:

  1. ActionContext.RequestContext.Principal.Identity.Name
  2. ActionContext.ControllerContext.Principal.Identity.Name
  3. ControllerContext.RequestContext.Principal.Identity.Name
  4. RequestContext.Principal.Identity.Name

  5. User.Identity.Name

  6. 虽然我觉得最后一个(所以:User.Identity.Name)可以是我可以使用的那个,无论应用程序类型如何(所以我可以从Web浏览器,桌面应用程序,移动应用程序调用),我是不太确定。

    另外,有什么方法可以用我的ID填充Identity吗?

    谢谢!

0 个答案:

没有答案