JWT token이 만료된 시간에만 효력을 상실하는 메커니즘을 유지합니다
3352 단어 token
사고방식을 해결하다
우리가 현재 성숙한 JWT를 사용하여 토큰을 생성할 때 중요한 것이 하나 있다priv_key, 이것은 JWK 클래스의 데이터입니다. 이것은 하나의 클래스로 봉인되었습니다.우리는python에서 다음과 같이 값을 출력할 수 있습니다.
key = jwk.JWK.generate(kty='EC', crv='P-256')
key.export(private_key=False)
"{"y":"VYlYwBfOTIICojCPfdUjnmkpN-g-lzZKxzjAoFmDRm8","x":"3mdE0rODWRju6qqU01Kw5oPYdNxBOMisFvJFH1vEu9Q","crv":"P-256","kty":"EC"} 이전의 메커니즘은 서버를 다시 시작할 때마다generateJWK의 문장을 실행하기 때문에 생성된 JWK에 의 값은 y와 x의 값에 따라 JWK가 다르기 때문에 다시 검증할 때 검증된priv_키 매개 변수는 이미 당신의 최초의 것이 아니기 때문에 검증에 성공하지 못했습니다.
결국 나는 비교적 멍청하지만 실용적인 방법을 채택했다. 바로priv_를key는 미리 생성된 다음에 token의 각종 조작을 할 때마다 가지고 있는 JWK류의 비밀 키는 바로 우리가 미리 생성한priv_key, Token은 유효기간이 만료되었을 때만 효력을 상실하고, 서버를 다시 시작한 후에 효력을 상실하지 않습니다.
해결 코드의python
import python_jwt as jwt, jwcrypto.jwk as jwk ,datetime
key = {"d":"igkREvy4tJjCjdttFZzfVcsJO0Wj0MGtxZFcremC5bNCibqQFrp-pRGkjrJIMxSiXYcaXXyVu5L11MvsKWVKA9lWhAiX8gbJ9cXirsWtIlhutO_Lv2X1kOBlJyQkdb6oPuOi5VUcXuAjWFRUvH5P60UJA1yXRZMn9gzxgMSDErGkhnFQejxBE5Qde3mUxf4pm7ysvq9eZ9xPhferl6oZ_QF60Ajj5dcJ8DWLCIftqUSwNnbMhl0Wa94PGje3kkslt1JkIaaj4ZeAL3oKmxm__hq7pG0cWGgrp6GJTOoiIOy9KHP8iaGN4GQ2diUp1iBSNFwjgN1I7RzTzq19DewIAQ","dp":"OqlXvoSVF6boqYTKhcDNQnjE-ImQWqe753BhV_SQSSeb5wlw-9O_fu23C9HyG1JCEQuJmdgm9lpiI4qwUZimuSnEOZ-FyXL440dRCNw9rew-UnTkHxaTu1ATaBtM-eFrzbtjOv9O99ITQTSCvnkDVzxuaprddstOWbJH07Bm9gE","dq":"VpCAsfGOEpxQHv__AihrJNW-5XpB1E2lxGVnM0bSlAhlMY9LRRtdr93asz7A2TB_wcSk67MgP3UeAGk2buS2C89Vsl6LMeYQQFrxcT2YyobUeRUrKtgIYsoSbHLVsqUHkM3oSqTxYOPg9OQmf-oL3jq3hhtZT0T3HriNMN_ndqk","e":"AQAB","kty":"RSA","n":"4uXpp92owv-SHgLRgboYflOX63Irhe-hU21cn25uaH6Er-nFEJHQWrdDExaU3sIS1wF54nuinazfIu2Ndc56feVuy2G2bwWCTwbss_34bGuEjGBRQeBQEtas7IBwwzbisTcW9FOwDBmleAECLPChjycoASqCnUaGGeUOH8H5MFXc4xcaDnSYG3ZKfzTgfqsAsp2__DIyB39T8ez0Ey9ux7DVjkHZ_2V7NJ9f2N1kY3TpczayHaa4I9FdGzKe6uv7KbWHK1V7Mml-JowagXIKRx30aaBtsdRNE3ICHi3vBS3VSzwGEsPk53U-x7Oer5NusXbE133hTX-j4vTgZDIpCw","p":"8daGAzGb74KGePZCCKcj4iTuzmSpiv3-_P5B3pE6DJdkOTjMR4MWzC6KCHyLaetxHfZpoU50NlK_oedLc0UCZX5CThlF9DEvn2Gb_8NMQOWDbuztLKquC_IhVmhWRTAQef0FLOv7ipa_ZYej72CJ2fWfpv_jbTYcU45VJ9w6ZgE","q":"8C9rleVhoglOopNKzrOKDMFlLX1puPtiN4a8rhWnPmrV1rCWDKTyCDBSusfm8PiYzQVnqTUme3DoQlJbvH1uQKeIXSscJBVaX8IcfCcgYtdH1cq4xWDBeNoJLMEH_jVvWcHBwD2xEupjBtyeBdCzDR7i60PXXPlDR9Ufckplxws","qi":"NLFbHCmgEaNuq17i4u0BDIYa8r0GiIYubT-M538lLtOM2CUCOax1UdUoihb0e6fhAQcZjQGayJCNYpNpsHBxt3pY2j4ygiqB3muEmS7-SlkYKeVxEg_q8LbZ8RxBzIQ5ZOQeoZJf5SElRa77wInSk2-pGGaU9RkruY8Gwd6ysEU"}
# priv_key
tokenKey = jwk.JWK(**key) # JWK
payload = {'message':'helloWord!'} #
token = jwt.generate_jwt(payload, tokenKey, 'RS256', datetime.timedelta(minutes=100)) # SMSCodetoken 60S
print(token)
이로써 당신은 서버의 제한을 받지 않는 토큰을 생성할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
reset_password_token(invitation_token)을 덮어쓰는 Mac Sierra Safari에서!OS 버전: Mac Sierra 10.12.6 브라우저: Safari 11.0.1 OS : Red Hat Enterprise 6.2 (낡고 부끄러운) 언어 : ruby2.1 (이쪽도 낡고 부끄러운) Rails 4.1...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.