|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
Коллеги! Стоит задача: 1. Необходимо реализовать декодирования JWT Access / Refresh токенов с проверкой цифровой подписи и срока жизни посредством публичного ключа . На беке пара токенов (Access / Refresh) генерятся с сеттингами Код: c# 1. 2. 3. 4. 5. 6. 7.
Теперь фронт требует от меня этот публичный ключ . Откуда мне им его дать??? ))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 20:25 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
Публичный ключ тебе даст сервер авторизации, который выписал токен https://сервер/.well-known/openid-configuration/ https://сервер/.well-known/openid-configuration/jwks ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 20:41 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
А вообще, зачем тебе это реализовывать самому, если есть готовые реализации? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 20:43 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
Shocker.Pro Публичный ключ тебе даст сервер авторизации, который выписал токен https://сервер/.well-known/openid-configuration/ https://сервер/.well-known/openid-configuration/jwks не совсем понял? токены генерятся у меня на беке. нет больше никаких серверов авторизации. раньше все было хорошо без всяких ключей. токен валидировался на беке и фронт ничего не делал, но пришли новые требования. теперь фронт у себя тоже будет проверять токены, а мне им дать нечего ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 20:56 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
RegisteredUser токены генерятся у меня на беке ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 21:55 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
Shocker.Pro RegisteredUser токены генерятся у меня на беке не совсем руками ))) вот через это: System.IdentityModel.Tokens.Jwt ендпоинт сделать не проблем, где взять публичный ключ, чтобы его отдать? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 22:06 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
RegisteredUser вот через это: System.IdentityModel.Tokens.Jwt ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 22:31 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
Shocker.Pro RegisteredUser вот через это: System.IdentityModel.Tokens.Jwt вот в ЭТОМ и вопрос: откуда мне взять эту публичную часть , чтобы выдать? потому как приватная часть у меня просто прописана в сеттингсах и я ее могу менять как хочу. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 22:55 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
RegisteredUser Shocker.Pro пропущено... Ну "вот это" подписывает токен тем ключом, которым ты ему дал (приватной частью), а публичную часть тебе нужно будет выдать всем желающим проверить эту подпись. вот в ЭТОМ и вопрос: откуда мне взять эту публичную часть , чтобы выдать? потому как приватная часть у меня просто прописана в сеттингсах и я ее могу менять как хочу. вот так сгенерить пару? Код: powershell 1. 2.
приватный подложить себе на бек, а публичный отдать фронту? взято отсюда: https://medium.com/@kevinle/securing-c-net-webapi-with-public-private-key-signed-jwts-signed-by-nodejs-4fd60d97b7f4 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 23:18 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
Ну я ж не знаю, где у тебя там что прописано RegisteredUser токен валидировался на беке ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 23:50 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
RegisteredUser приватный подложить себе на бек, а публичный отдать фронту? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 23:50 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
RegisteredUser RegisteredUser пропущено... вот в ЭТОМ и вопрос: откуда мне взять эту публичную часть , чтобы выдать? потому как приватная часть у меня просто прописана в сеттингсах и я ее могу менять как хочу. вот так сгенерить пару? Код: powershell 1. 2.
приватный подложить себе на бек, а публичный отдать фронту? взято отсюда: https://medium.com/@kevinle/securing-c-net-webapi-with-public-private-key-signed-jwts-signed-by-nodejs-4fd60d97b7f4 в общем, как выяснилось, именно так и хотели. - генерим пару ключей руками: публичные отдаем на фронт, публичный и приватный держим на беке. п.с. я просто думал, что эти ключи как-то генерятся через JWT, но все окозалось проще ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 09:31 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
глупость какая-то фронтенду проверять подписи токенов ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 10:49 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
RegisteredUser Теперь фронт требует от меня этот публичный ключ . Откуда мне им его дать??? ))))) Какой ещё фронт? Можно подробнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 14:39 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
stenford глупость какая-то фронтенду проверять подписи токенов ну, такое требование появилось ))) я не виноватая hVostt RegisteredUser Теперь фронт требует от меня этот публичный ключ . Откуда мне им его дать??? ))))) Какой ещё фронт? Можно подробнее? мобильное приложение ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 17:39 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
RegisteredUser stenford глупость какая-то фронтенду проверять подписи токенов ну, такое требование появилось ))) я не виноватая Вы не правильно поняли требование. Либо требование поставили без малейшего понимания схемы авторизации, либо под грибами. Сходите и ещё раз уточните, они там протрезвели, постановщики или по-позже нужно придти. Проверка подписи проверяется на сервере. При выдаче токена по запросу проверяется клиентом-сервера на основании приватного ключа. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 17:55 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
hVostt RegisteredUser пропущено... ну, такое требование появилось ))) я не виноватая Вы не правильно поняли требование. Либо требование поставили без малейшего понимания схемы авторизации, либо под грибами. Сходите и ещё раз уточните, они там протрезвели, постановщики или по-позже нужно придти. Проверка подписи проверяется на сервере. При выдаче токена по запросу проверяется клиентом-сервера на основании приватного ключа. может и неправильно я что-то понял, поэтому привожу текст задачи для мобильного приложения: 1. Необходимо реализовать декодирования JWT Access / Refresh токенов с проверкой цифровой подписи и срока жизни посредством публичного ключа. 1.2 Время действия каждого токена из пары считывать непосредственно с поля `exp` соответствующего токена в декодированном виде 1.3 В постоянной / энергонезависимой памяти устройства хранить только JWT Refresh Token 1.4 JWT Access Token хранить только в пределах оперативной памяти устройства 2. Сценарий запуска приложения: 2.1 Считать с энергонезависимой памяти устройства JWT Refresh Token, провести процедуру его верификации 1. Если токен невалидный, сохранить в пределах оперативной памяти устройства значения текущей роли пользователя в `null`, завершить процедуру инициализации 2.2 Выполнить метод `RefreshToken` и обновить пару токенов 2.3 Токены проверить на предмет цифровой подписи и срока жизни 1. При сбое верификации хотя бы одного токена, сохранить в пределах оперативной памяти устройства значения текущей роли пользователя в `null`, завершить процедуру инициализации 2.4 Сохранить JWT Refresh Token в энергонезависимой памяти устройства, JWT Access Token и роль пользователя - в пределах оперативной памяти устройства ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 18:04 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
RegisteredUser hVostt пропущено... Вы не правильно поняли требование. Либо требование поставили без малейшего понимания схемы авторизации, либо под грибами. Сходите и ещё раз уточните, они там протрезвели, постановщики или по-позже нужно придти. Проверка подписи проверяется на сервере. При выдаче токена по запросу проверяется клиентом-сервера на основании приватного ключа. может и неправильно я что-то понял, поэтому привожу текст задачи для мобильного приложения: 1. Необходимо реализовать декодирования JWT Access / Refresh токенов с проверкой цифровой подписи и срока жизни посредством публичного ключа. 1.2 Время действия каждого токена из пары считывать непосредственно с поля `exp` соответствующего токена в декодированном виде 1.3 В постоянной / энергонезависимой памяти устройства хранить только JWT Refresh Token 1.4 JWT Access Token хранить только в пределах оперативной памяти устройства 2. Сценарий запуска приложения: 2.1 Считать с энергонезависимой памяти устройства JWT Refresh Token, провести процедуру его верификации 1. Если токен невалидный, сохранить в пределах оперативной памяти устройства значения текущей роли пользователя в `null`, завершить процедуру инициализации 2.2 Выполнить метод `RefreshToken` и обновить пару токенов 2.3 Токены проверить на предмет цифровой подписи и срока жизни 1. При сбое верификации хотя бы одного токена, сохранить в пределах оперативной памяти устройства значения текущей роли пользователя в `null`, завершить процедуру инициализации 2.4 Сохранить JWT Refresh Token в энергонезависимой памяти устройства, JWT Access Token и роль пользователя - в пределах оперативной памяти устройства Стандартно, вцелом. Зачем Вам этот баян, что в этом топике обсуждаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 22:58 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
RegisteredUser может и неправильно я что-то понял, поэтому привожу текст задачи для мобильного приложения: 1. Необходимо реализовать декодирования JWT Access / Refresh токенов с проверкой цифровой подписи и срока жизни посредством публичного ключа. 1.2 Время действия каждого токена из пары считывать непосредственно с поля `exp` соответствующего токена в декодированном виде 1.3 В постоянной / энергонезависимой памяти устройства хранить только JWT Refresh Token 1.4 JWT Access Token хранить только в пределах оперативной памяти устройства 2. Сценарий запуска приложения: 2.1 Считать с энергонезависимой памяти устройства JWT Refresh Token, провести процедуру его верификации 1. Если токен невалидный, сохранить в пределах оперативной памяти устройства значения текущей роли пользователя в `null`, завершить процедуру инициализации 2.2 Выполнить метод `RefreshToken` и обновить пару токенов 2.3 Токены проверить на предмет цифровой подписи и срока жизни 1. При сбое верификации хотя бы одного токена, сохранить в пределах оперативной памяти устройства значения текущей роли пользователя в `null`, завершить процедуру инициализации 2.4 Сохранить JWT Refresh Token в энергонезависимой памяти устройства, JWT Access Token и роль пользователя - в пределах оперативной памяти устройства Это всё стандартно и понятно. Нафига это делать на фронте? Фронт будет ходить в бек с выданным токеном. Если токен не валидный, бек итак даст отворот поворот, проверка на клиенте бессмысленное действо. Ибо в любом случае выдача токена проходит по HTTPS, атаку выполнить невозможно в случае доверенного сертификата. Короче, они там ваши фронты в край долбанулись, хрен с ним. Дайте им публичный ключ, пусть свой тупой хернёй маются. Собственно пару ключей можно сгенерировать так: Код: powershell 1. 2. 3. 4.
в файле jwtRS256.key будет приватный ключ в файле jwtRS256.key.pub будет публичный ключик. Или воспользуйтесь публичным сервисом, но это не безопасно: https://mkjwk.org/ ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 23:46 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
Коллеги! Есть еще вопрос. Ранее у меня использовался SymmetricSecurityKey и ключ был один. При создании токена использую ключ: Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
При валидации публичный ключ Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
теперь у меня 2 ключа. что теперь использовать для SecurityKey? П.С. У меня бек на .Net Core 2.2. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 12:57 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
Погоди, причем тут валидация на бэке, ты же ее на фронте хотел сделать. Валидация на бэке есть из коробки, ее писать самому не требуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:30 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
Shocker.Pro Погоди, причем тут валидация на бэке, ты же ее на фронте хотел сделать. Валидация на бэке есть из коробки, ее писать самому не требуется. На беке валидация как была, так и должна остаться. Я на беке подписываю токены ПРИВАТНЫМ ключем? key у меня раньше шифровался моим ключем: var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_settings.Key)); вот тут: var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); Я на беке так и буду валидировать приватным ключем? Может все же там RSA пара нужна, а не симметричная? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:49 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
Ты бы разобрался как работает несимметричное шифрование, чем отличается шифрование от подписывания, а то щас наколбасишь. Подписывается приватным ключом отправителя, подпись проверяется публичным ключом отправителя Шифруется публичным ключом получателя, получатель расшифровывает своим приватным ключом. Подписанный документ не зашифрован. JWT-токен не зашифрован, вся информация там в открытом виде ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 14:01 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
Спасибо за помощь. Разобрался с ключами и подписями. Чуть позже выложу код, может кому-то тоже будет надо такую фигню сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 23:15 |
|
JWT и публичный ключ
|
|||
---|---|---|---|
#18+
Очень помог еще вот этот ресурс Introduction to OAuth2: Json Web Tokens Тут пример, как использовать RS256 для подписи токена с последующей валидацией подписи открытым ключем. Единственное, на всякий случай дам свой код, который точно валидируется на https://jwt.io/ Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2020, 21:35 |
|
|
start [/forum/topic.php?fid=18&msg=40000416&tid=1354624]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 280ms |
total: | 435ms |
0 / 0 |