ASP.NET Identity OAuth令牌字符串允许更改最后一个字符



. NET Identity, WebAPI和UseOAuthBearerTokens

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,并且它仍然允许用户访问API

对,这是在我的上一个答案被删除后的另一个答案。

微软一些更了解JWT的人反馈如下:

当然——JWT由三部分组成,中间用'分隔。'字符
如果我用base64解码这个会写:

{"typ":"JWT"、"alg":"HS256"}{"unique_name":"x@y.z"、"子":"x@y.z"、"国际空间站":"https://x-y-z.azurewebsites.net/","澳大利亚":"任何","经验":1506047645,"nbf":1505442845}яE7 sa (PƙAa)ʗ3 ?g (

第一部分是算法类型,中间是声明,最后是密钥。它们是密钥——不管你玩不玩都没关系它仍然会解码,最后一个字符一定是未使用的的性格。

你不能这样做来伪造索赔重要的是你是否可以改变索赔-改变两者之间的任何东西两个中间键,然后它就会停止工作。

我的结论是,更改密钥不会影响令牌的安全性/完整性。解码令牌的系统要么成功解码,要么根本不解码,有或没有篡改。您将无法劫持会话,也不代表它是一个漏洞。

相关内容

  • 没有找到相关文章

最新更新