使用Owin和OAuth,我注意到如果您修改令牌的最后一个字符,您仍然可以成功进行身份验证/授权。
我使用的是C#WebAPI应用程序,但我不知道这是否适用于OAuth。这可能是设计上的,但对我来说似乎很奇怪,所以我很想知道为什么会这样。
要复制此行为:
使用REST客户端,使用Content-Type: application/json
标题和以下正文POST发送至http://localhost:23220/api/account/register *:
{
"UserName": "test",
"Password": "password",
"ConfirmPassword": "password"
}
使用REST客户端,POST到http://localhost:23220/token *,没有标题和以下正文:
grant_type=password&username=test&password=password
使用REST客户端,使用Authorization: Bearer xxx
标头获取http://localhost:23220/api/values *,其中xxx
是您在上一个请求中生成的访问令牌。此请求应得到授权,您应该得到200响应。
Authorization
标头值的最后一个字符,方法是将其递增1.例如,如果最后一个字符是a
,请将其更改为b
;如果是1
,请将其更改为2
等。请求仍然会成功。* 相应地更改端口。
答案 0 :(得分:1)
AccessTokenFormat - 用于保护信息中包含的信息的数据格式 访问令牌。如果应用程序未提供默认数据 保护提供程序取决于主机服务器。 SystemWeb主机上 IIS将使用ASP.NET机器密钥数据保护,以及HttpListener和 其他自托管服务器将使用DPAPI数据保护。
由于以这种方式设置项目将在IIS Express下运行,因此令牌受MachineKey
API保护。我无法找到加密值的确切数据格式的描述,但是从以前的加密工作中,我预计最后可能会有填充。这个填充不会受到令牌签名的保护,但这并不重要,因为它只是被剥离并被丢弃。请注意,更改范围是有限的,因此我希望只能修改最后一个字节的最后几位。