验证WebAPI中的JWT声明

时间:2015-01-04 18:58:43

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

鉴于下面的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的其他计算机上)。

1 个答案:

答案 0 :(得分:2)

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

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