2015-01-04 6 views
2

Учитывая Thinktecture AuthenticationConfiguration ниже:Проверка JWT претензий в WebAPI

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) 
    } 
}; 

Это возвратит пример JWT из eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJzZXNzaW9uIGlzc3VlciIsImF1ZCI6Imh0dHA6Ly9zZXNzaW9uLnR0IiwibmJmIjoxNDIwMzk2ODgyLCJleHAiOjE0MjA0MDA0ODIsInVuaXF1ZV9uYW1lIjoicGFzcyIsImF1dGhtZXRob2QiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvYXV0aGVudGljYXRpb25tZXRob2QvcGFzc3dvcmQiLCJhdXRoX3RpbWUiOiIyMDE1LTAxLTA0VDE4OjQxOjA0LjAxOVoiLCJyb2xlIjoiVmVyaWZpZWQifQ.h7curaLrqkMT4Btg-AAoEpNYqUIYNQA_y-eUdEwQBqs

Который является:

{ 
    "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).

ответ

2

Вы можете использовать общий симметричный ключ или закрытый ключ для подписи JWT и использовать тот же симметричный ключ или соответствующий связанный открытый ключ для его проверки.

Алгоритм, используемый для этого JWT (HS256), предполагает использование общего симметричного ключа, поэтому вам необходимо знать этот симметричный ключ на принимающей стороне, чтобы проверить JWT.

+0

Спасибо Hans, я обновил свой вопрос. Я использую 'SigningKey = CryptoRandom.CreateRandomKey (32)' все остальное по умолчанию с помощью thinktecture AuthenticationConfiguration library - я знаю закрытый ключ, но я не могу найти, где найти общий ключ. – g18c

+0

'генерирует случайный общий симметричный ключ. Вы должны сохранить это значение и отправить его (возможно, base64encoded) в приемник, вне диапазона, чтобы он мог проверить JWT. Существует ** нет ** частного ключа, участвующего в подписании * этого * JWT. –

+0

@ Ханс. - У вас есть опыт использования ключей с новейшей версией mcc6 rc1? Если у вас есть минута, посмотрите мой вопрос http://stackoverflow.com/questions/34348704/jwtbearer-bearer-token-with-rc-1-update-to-asp-net-5 –

Смежные вопросы