ASP.NET标识OAuth令牌字符串允许更改最后一个字符
使用ASP.NET标识、WebAPI和UseAuthBearTokensASP.NET标识OAuth令牌字符串允许更改最后一个字符,asp.net,asp.net-web-api,oauth,asp.net-identity,access-token,Asp.net,Asp.net Web Api,Oauth,Asp.net Identity,Access Token,使用ASP.NET标识、WebAPI和UseAuthBearTokens public void Configuration(IAppBuilder app) { app.UseOAuthBearerTokens(new OAuthAuthorizationServerOptions { AllowInsecureHttp = true, TokenEndpointPath = new PathString(
public void Configuration(IAppBuilder app)
{
app.UseOAuthBearerTokens(new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new CustomProvider(...))
});
}
API在有效登录请求时返回令牌字符串。令牌工作正常,并允许最终用户访问API的授权部分,但是,如果令牌字符串的最后一个字符被更改,它有时仍然工作。这似乎只是字符串的最后一个字符的情况,只有一些值/更改仍然允许令牌有效。为什么会这样?这是代码的问题还是身份的一部分
例如:
从服务器返回的令牌为
mdC0XvL4VBucyMPD-OvQ0KA5vW1Q8OHdF4OtqET5hEFI20uaOXbX4JlzTwkLRmWUr-4cIzQf1adXx5DbnXltuwcSjiX1NEY5DqhS3c9GyU1c2VqLAOUYj4-BraaheNsCPvReZqvT__NsObpziKX98SY4gSUGDBVigVONdvlpRunzPZlIeJh99jBqzavuo4qSEElAlBNvNFts95aN7otO5-bNiDNl1t_CP9PQWcTIipMNe_No2J8wGbmIvEWCBAhN3Ts6lvmFpHSA02up1YykZoDZa0TZY7QOt187aP9-7kN
您可以将N(在令牌字符串的末尾)更改为O或p,并且它仍然允许用户访问APIRightio,因此在删除我的上一个答案后,这里是另一个答案 微软的一些人对JWT有了更多的了解,并反馈如下 当然–所以JWT分为三部分,由“.”字符分隔
如果我解码 它会说: {“类型”:“JWT”,“alg”:“HS256”} {“唯一名称”:x@y.z“,“sub”:”x@y.z“,”国际空间站“,”澳大利亚“:”任何“,”实验“:1506047645,“nbf”:1505442845}7Sa( PƙAa)ʗ3?g[ 第一部分是算法类型,中间部分是声明,最后一部分是它们的密钥——不管你是否使用它 它仍然在解码…改变最后一个字符一定有一个未使用的字符 性格 你不能通过那样做来伪造这些声明…到底是什么 重要的是,如果你能改变这些主张,那么你可以在两种主张之间改变任何东西 两个中间点,然后它就会停止工作
我的结论是,更改密钥不会影响令牌的安全性/完整性。解码令牌的系统会成功或根本不会对其进行解码,无论是否进行篡改。您将无法劫持会话,也不表示存在漏洞。在我看来,这确实增加了能够o猜测令牌,即劫持会话…但可能性仍然很小。此外,可以通过向令牌添加额外的熵使其变长来减轻这种可能性。(添加额外数据(实数或填充),使用不同的编码算法,等等)