【问题标题】:Verify JWT Claims in WebAPI在 WebAPI 中验证 JWT 声明
【发布时间】:2015-03-02 09:08:02
【问题描述】:

鉴于下面的 Thinktecture AuthenticationConfiguration:

var authConfig = new AuthenticationConfiguration
{
    EnableSessionToken = true,
    SendWwwAuthenticateResponseHeaders = true,
    RequireSsl = false,
    ClaimsAuthenticationManager = new ClaimsTransformation(),
    SessionToken = new SessionTokenConfiguration
    {
        EndpointAddress = "/api/token",
        SigningKey = CryptoRandom.CreateRandomKey(32),
        DefaultTokenLifetime = new TimeSpan(1, 0, 0)
    }
};

它将返回 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJzZXNzaW9uIGlzc3VlciIsImF1ZCI6Imh0dHA6Ly9zZXNzaW9uLnR0IiwibmJmIjoxNDIwMzk2ODgyLCJleHAiOjE0MjA0MDA0ODIsInVuaXF1ZV9uYW1lIjoicGFzcyIsImF1dGhtZXRob2QiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvYXV0aGVudGljYXRpb25tZXRob2QvcGFzc3dvcmQiLCJhdXRoX3RpbWUiOiIyMDE1LTAxLTA0VDE4OjQxOjA0LjAxOVoiLCJyb2xlIjoiVmVyaWZpZWQifQ.h7curaLrqkMT4Btg-AAoEpNYqUIYNQA_y-eUdEwQBqs 的示例 JWT

这是:

{
    "alg": "HS256", 
    "typ": "JWT"
}

{
    "unique_name": "pass", 
    "aud": "http://session.tt", 
    "iss": "session issuer", 
    "authmethod": "http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/password", 
    "role": "Verified", 
    "exp": 1420400482, 
    "auth_time": "2015-01-04T18:41:04.019Z", 
    "nbf": 1420396882
}

如何验证 JWT 是从受信任的机器发出的,我们可以使用对称密钥作为私有签名密钥并在远程机器上使用相同的密钥进行验证吗?

我如何连接 WebAPI 以便它自动为我们执行此操作(假设 AuthenticationConfiguration 位于另一台专用于帐户安全 API 的机器上)。

【问题讨论】:

    标签: security asp.net-web-api2 jwt thinktecture-ident-model


    【解决方案1】:

    您可以使用共享的对称密钥对 JWT 进行签名,并使用相同的对称密钥或相关的公钥来验证它。

    此 JWT (HS256) 使用的算法表明使用了共享对称密钥,因此您需要知道接收端的对称密钥才能验证 JWT。

    【讨论】:

    • 谢谢汉斯,我更新了我的问题,我正在使用SigningKey = CryptoRandom.CreateRandomKey(32) thinktecture AuthenticationConfiguration 库的默认设置 - 我知道私钥,但我似乎无法找到共享密钥
    • 您正在生成一个随机共享对称密钥。您应该保存该值并将其(可能是 base64 编码)发送到带外的接收器,以便他可以验证 JWT。 没有私钥参与this JWT的签名。
    • @HansZ。 - 你有使用 mvc6 最新 rc1 版本的密钥的经验吗?如果您有时间,请查看我的问题stackoverflow.com/questions/34348704/…
    猜你喜欢
    • 2019-08-20
    • 2017-09-09
    • 2018-01-28
    • 2020-10-09
    • 2020-11-24
    • 2014-02-20
    • 1970-01-01
    • 2018-09-02
    • 2021-04-26
    相关资源
    最近更新 更多