WebAPI 2安全路由参数

时间:2017-03-02 06:11:38

标签: asp.net-web-api actionfilterattribute

我有一种情况,我不想在API路由参数中传递登录的用户ID。 例如,有一个WebAPI [GET或POST]端点' api / getUserDetails / {id}'。此ID将传递到另一个层以获取用户数据。

public RestResult getUserDetails(int uID)
{
  int uID = getFromHeaderCookie();
  var userDetails = someService.GetUserDetail(uID);
  return userDetails;
} 

此处id作为路由参数传递,通过更改Id值,任何人都可以看到其他用户数据。

所以现在我想要的网址应该是' api / getUserDetails'我正在从登录时保存的标题Cookie中读取Id。使用ActionFilters我可以设法获得Id。

public RestResult getUserDetails( )
    {
      int uID = getFromHeaderCookie();
      var userDetails = someService.GetUserDetail(uID);
      return userDetails;
    } 

这是有效的,但看起来不太好,因为还有其他方法我想要保护UserId。 有没有办法删除int uID = getFromHeaderCookie();并使用一些自定义模型绑定器在控制器中注入userID?

提前致谢

1 个答案:

答案 0 :(得分:0)

您可以尝试Oauth,并从ClaimsIdentity获取用户信息,只需要在请求网址时添加授权(例如Bearer AccessToken)。