【问题标题】:ASP.NET Identity OAuth token string allows last character to be changedASP.NET Identity OAuth 令牌字符串允许更改最后一个字符
【发布时间】:2015-10-27 08:04:16
【问题描述】:

使用 ASP.NET 身份、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

【问题讨论】:

    标签: asp.net asp.net-web-api oauth asp.net-identity access-token


    【解决方案1】:

    Rightio,所以这是我之前的答案被删除后的另一个答案。

    Microsoft 中更了解 JWT 的人反馈了以下内容。

    当然——所以 JWT 分为三部分,用“.”分隔。性格
    如果我base64解码 它会说:

    {"typ":"JWT","alg":"HS256"} {"unique_name":"x@yz","sub":"x@yz","iss":"https://x-y-z.azurewebsites.net/","aud":"Any","exp":1506047645,"nbf":1505442845 } яE7Sa( PƙAa)ʗ3?g[

    第一部分是算法类型,中间是声明,最后是关键,它们是关键——你玩不玩都没关系 它仍然解码......改变最后一个字符必须有一个未使用的 特点。

    您不能通过这样做来伪造声明……真正的作用是什么 问题是您是否可以更改声明 - 更改两者之间的任何内容 两个中间的.,然后它就会停止工作。

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

    【讨论】:

    • 在我看来,它确实增加了猜测令牌的可能性,即 - 劫持会话。 ..但这种可能性仍然很小。此外,可以通过向令牌添加额外的熵以使其更长来缓解这种情况。 (添加额外数据(实数或填充),使用不同的编码算法等)connect2id.com/products/nimbus-jose-jwt/…
    猜你喜欢
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多