2016-04-07 32 views
1

使用Owin和OAuth,我注意到如果修改令牌的最后一个字符,您仍然可以成功进行身份验证/授权。修改后的OAuth令牌仍然可以进行身份​​验证/授权

我正在使用C#WebAPI应用程序,但我不知道这是否适用于一般的OAuth。这可能是设计,但它似乎对我来说很奇怪,所以我很想知道为什么发生这种情况。

复制此行为:

  1. 在Visual Studio中创建一个新的项目,并选择 'ASP.NET Web应用程序' 作为模板。
  2. 选择'Web API'模板,并选择'Individual User Accounts'作为验证类型。
  3. 构建项目。
  4. 使用REST客户端,POST到http://localhost:23220/api/account/register *与Content-Type: application/json头和随动体:

    { "UserName": "test", "Password": "password", "ConfirmPassword": "password" }

  5. 使用REST客户端,POST到http://localhost:23220/token *无标头和随动体:

    grant_type=password&username=test&password=password

  6. 使用REST客户端,GET http://localhost:23220/api/values *用Authorization: Bearer xxx标头,其中xxx是您在前一个请求中生成的访问令牌。这个请求应该被授权,你应该得到200响应。

  7. 再犯同样的GET请求,但这次是以1递增它因此,举例来说,如果最后一个字符是a,将其更改为b修改Authorization头值的最后一个字符;如果是1,请将其更改为2等。请求仍然会成功。

* 相应地更改端口。

回答

1

AccessTokenFormat - 用于保护包含在 访问令牌信息的数据格式。如果应用程序未提供,则默认数据 保护提供程序取决于主机服务器。IIS上的SystemWeb主机将使用ASP.NET机器密钥数据保护,并且其他自托管服务器的HttpListener和 将使用DPAPI数据保护。

由于以这种方式设置项目将在IIS Express下运行,令牌受到MachineKey API的保护。我无法找到加密值的确切数据格式的描述,但是从以前的密码学工作中,我预计最后可能会有填充。这个填充不会受到令牌签名的保护,但这并不重要,因为它只是被剥离和丢弃。请注意,变化的范围是有限的,所以我希望只能修改最后一个字节的最后几位。

+0

这听起来像是一个可能的解释!并感谢您的额外细节。 – Moo

相关问题