C# 用于添加/编辑/删除场景的WebAPI保护资源

C# 用于添加/编辑/删除场景的WebAPI保护资源,c#,.net,authentication,asp.net-web-api,owin,C#,.net,Authentication,Asp.net Web Api,Owin,我在IIS上安装了以下设置WebAPI,带有OWIN令牌身份验证,具有以下场景: 用户有一个个人资源,比如说只有他们可以编辑的个人资料 在我的应用程序中,我通过随机生成的ID识别用户 我将这个ID保存在前端,对API的请求包含它 现在,我希望确保并授权编辑个人资源的请求,以便只有所有者(例如,其配置文件为的用户)可以修改任何字段 修改此资源的请求到达后,我想检查调用者(取自请求)是否与HttpContext中的调用者相同(因此有人修改其请求中的公共可用id以拒绝编辑命令) 请记住,在我的请求

我在IIS上安装了以下设置
WebAPI
,带有
OWIN令牌身份验证
,具有以下场景:

  • 用户有一个个人资源,比如说只有他们可以编辑的个人资料
  • 在我的应用程序中,我通过随机生成的
    ID
    识别用户
  • 我将这个
    ID
    保存在前端,对
    API的请求包含它
现在,我希望确保并
授权
编辑个人资源的请求,以便只有所有者(例如,其配置文件为的用户)可以修改任何字段

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

请记住,在我的请求中,我保留用户的
ID
,而在
HttpContext.Current.user.Identity上则包含电子邮件。此时,我可以打电话给用户经理,通过
HTTPContext
中的电子邮件在数据库中搜索用户,并检查ID是否相等。但这需要我在开始实际执行命令之前就对数据库提出问题(因此从性能角度来看,这并不完美)

有没有一种方法可以用
ID
填充
HttpContext
(在电子邮件中,或者将
Name
属性从
User.Identity
更改为
ID
),这样我就可以拥有类似
HttpContext.User.Identity.ID
(因为我认为我无法修改该对象-显而易见的原因)?或者
HttpContext.User.Identity.Name
给我
ID

还是可以在
WebAPI
内部使用
HttpContext

谢谢, 拉杜

编辑:在一次
API
调用中查看了本地人之后,我发现了几个可以检索身份的地方:

  • ActionContext.RequestContext.Principal.Identity.Name
  • ActionContext.ControllerContext.Principal.Identity.Name
  • ControllerContext.RequestContext.Principal.Identity.Name
  • RequestContext.Principal.Identity.Name

  • User.Identity.Name

  • 虽然我觉得最后一个(因此:
    User.Identity.Name
    )可能是我可以使用的,而不管应用程序类型如何(因此我可以从web浏览器、桌面应用程序、移动应用程序调用),但我不太确定

    还有,有没有办法用我的ID填充
    标识


    谢谢

    WebAPI和
    HttpContext
    。那里有设计的味道!好的,那么检索请求的
    上下文的合适方法是什么呢?谢谢