首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决web api中的安全漏洞

如何解决web api中的安全漏洞
EN

Stack Overflow用户
提问于 2017-02-16 10:04:13
回答 3查看 118关注 0票数 0

在基于web的项目中,我使用基于OAuth令牌的身份验证。

如果对用户进行了身份验证,则生成一个访问令牌,如下所示。

代码语言:javascript
复制
{"access_token":"FFz_DC6zzEDD4mGOCk9172ijj3sGxCUWnk-tGanm9wGk76hMB8sHI8ImeWtdUKHHGNXv465ZSlbb-3fr_hr9DqUHc9Dm9OBI7XjJhdjdOpAGAGSFOpE0Y17LCEWTjCmEZotuf42Mpgl81ewoS7OlnH4b5w4PrtzJbIBpSAMoWObziL_U3mTkeFKvWrcWOfvlSCvhhBA9Dc3UTXv3HiHKWQk0T3-pvVy7ZuW2oac-IIuaq_GYaVkIZh7s9-YjX9KAL2Z9yfrPrVOQXZe_5OcNd7nS3tdT5odchEAiuWRYQ6t7Tfb2si4T6VdAe73OYefE0se1FeQsxbOiNaLyF8OwBqymEUzEG8tEHJ-cejVbhPw","token_type":"bearer","expires_in":1799,"as:client_id":"","user":"1","role":"1",".issued":"Thu, 16 Feb 2017 09:37:44 GMT",".expires":"Thu, 16 Feb 2017 10:07:44 GMT"}

下面是api方法之一。

代码语言:javascript
复制
    [Authorize]
    [HttpGet]
    [Route("{userId}/{type}/")]
    public IHttpResponse GetCustomerDetails(int userId, string type)
    {
       //my api stuff
    }

我正在使用邮递员测试api。当我将参数作为

代码语言:javascript
复制
http://localhost:50684/api/customer/1/gold
--along the access token in token in header--

它返回所需的json。

但是,如果我使用相同的令牌&传递customer id = 2,它仍然允许访问其他客户(使用id=2)。

代码语言:javascript
复制
 http://localhost:50684/api/customer/2/gold
 --Access token in header--

它不应该允许使用id=2对用户访问资源,因为生成的访问令牌对于id =1的用户是有效的。

我怎样才能防止这个安全漏洞?

任何帮助/建议都受到高度赞赏。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-16 10:36:10

问题是,您将userId作为一个参数发送,这本身就是一个糟糕的设计。

简单的解决方案是从上下文中获取当前用户。

代码语言:javascript
复制
[Authorize]
[HttpGet]
[Route("{type}/")]
public IHttpResponse GetCustomerDetails(string type)
{
    var user = RequestContext.Principal.Identity.Name;
   //my api stuff
}
票数 0
EN

Stack Overflow用户

发布于 2017-02-16 10:14:48

您可以将用户id和令牌存储在某个存储区(session,db)。并编写自己的MVC授权文件,如Authorize过滤器,将令牌与存储在存储中的用户id进行比较。

票数 0
EN

Stack Overflow用户

发布于 2017-02-16 10:17:09

目前,WebApi不符合用户id和身份验证用户id的概念。它不应该,因为您唯一指定的是带有某些参数的控制器方法的路由。您只需要通过使用“授权”属性对用户进行身份验证,但是一旦授予了访问权限,就不会运行进一步的验证。要使该方法仅适用于特定的用户子集,您可以编写自己的通用验证(在本例中,根据控制器范围内的" user“属性可以访问的用户声明进行检查),或者使用一些开箱即用的外部实现来处理身份验证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42270666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档