修改后的OAuth令牌仍然可以成功进行身份验证/授权

时间:2016-04-07 14:27:44

标签: oauth

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

我使用的是C#WebAPI应用程序,但我不知道这是否适用于OAuth。这可能是设计上的,但对我来说似乎很奇怪,所以我很想知道为什么会这样。

要复制此行为:

  1. 在Visual Studio中,创建一个新项目并选择“ASP.NET Web应用程序”。作为模板。
  2. 选择' Web API'模板,然后选择个人用户帐户'作为身份验证类型。
  3. 构建项目。
  4. 使用REST客户端,使用Content-Type: application/json标题和以下正文POST发送至http://localhost:23220/api/account/register *:

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

  5. 使用REST客户端,POST到http://localhost:23220/token *,没有标题和以下正文:

    grant_type=password&username=test&password=password

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

  7. 再次发出相同的GET请求,但这次修改Authorization标头值的最后一个字符,方法是将其递增1.例如,如果最后一个字符是a,请将其更改为b;如果是1,请将其更改为2等。请求仍然会成功。
  8. * 相应地更改端口。

1 个答案:

答案 0 :(得分:1)

  

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

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