2015-06-03 4 views
1

Я копировать вставить этот код из слоя:PyJWT, Ожидая PEM формате ключ

https://github.com/layerhq/support/blob/master/identity-services-samples/python/controller.py

Мне сказали два других людей побежал успешно на машинах макинтош. Я использую Windows 7, и я получаю TypeError: Ожидая PEM формате ключ при выполнении кода:

#Read RSA key 
root = os.path.dirname("__file__") 
with open(os.path.join(root, RSA_KEY_PATH), 'r') as rsa_priv_file: 

    #Not sure about adding the utf-8 AT ALL 
    priv_rsakey = RSA.importKey(rsa_priv_file.read()) 

#Create identity token 
#Make sure you have PyJWT and PyCrypto libraries installed and imported 
identityToken = jwt.encode(
    payload={ 
     "iss": PROVIDER_ID,     # String - The Provider ID found in the Layer Dashboard 
     "prn": user_id,      # String - Provider's internal ID for the authenticating user 
     "iat": datetime.datetime.now(),    # Integer - Time of Token Issuance in RFC 3339 seconds 
     "exp": datetime.datetime.utcnow() + datetime.timedelta(seconds=30), # Integer - Arbitrary Token Expiration in RFC 3339 seconds 
     "nce": nonce      # The nonce obtained via the Layer client SDK. 
    }, 
    key=priv_rsakey, 
    headers = { 
     "typ": "JWS",    # String - Expresses a MIME Type of application/JWS 
     "alg": "RS256",    # String - Expresses the type of algorithm used to sign the token, must be RS256 
     "cty": "layer-eit;v=1",  # String - Express a Content Type of Layer External Identity Token, version 1 
     "kid": KEY_ID    # String - Private Key associated with "layer.pem", found in the Layer Dashboard 
    }, 
    algorithm="RS256" 
) 

print identityToken 

Я не знаю, как еще мой PEM отформатирован ключ должен быть, но это выглядит следующим образом (Я вручную изменил ключ перед отправкой):

-----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQCWjLl4Hw8PLto2wGGxrpJ0afHQDX2iJ/xqNXyybgG0GxZI344u HXxn/bRzH4Z39pw3vGKrvd21hyln5/qaJGoCSb7QHAtdz8pfNF3t96DBcDh2aDMe +8W/4mZqiDi2zNqxAnmuv6vSKnU3UyqFpuPCdXFiA8Gt8OqHHLks8MYYjwIDAQAB AoGAII9i9YXSHfiGHV1SQ7l7102qjNK+HzoCr33N8FE2cRuCoFQpTfP2mg8W3ect j/h4JN3LgVVZBA+tdtiptHi3rF1W4yNs4pO3xYLJZHoCdG5CjHoMzEf2VwixK6+f 8FCCNErG8yxCpcPDH8D0NjMFzJ0t1kwsBQ0w5iSvdY3qtLECQQDgQPVk6W79kNS9 gBoZAB71yJazQpCwJ2SLYj6aFNZDX1Jpg5GRoVOs59gl13UF+9AwJf5MCIMbqaly T1/4aBa1AkEAq9y0DwSjNLl26XeBhWycQJZUu5lsJVqJcx2q0GsKGx5Ntei/48bD ldi7ZXWdA6o4OOV2GpW1hX7vssPHBXBYswJAMGXUkDLRAWiAgWVkPIEKLYFdBNMY 5uuZh3tsh1R36ZJo9tyuTf/DT026GHCnkOMHy1xnxYEQyqeTKlh3HeVZAQJAIQYC r1QTzEDLAaeOAsZQ6/Q3Cek4545TBgSwWuYGhhl3kznLDYiW8oc30xIbfqXJsd0d qZQU0jcG9hG6f2gMEwJALHz0jXhpjo+UygUjdKbW/mfKRirSYiGLCYQHiNc4aaDe omr9XLu9Hc6aI9RVGIFMnygaI9Ahu2mNkpj5UoaTTA==

-----END RSA PRIVATE KEY-----

Я не смог найти решение какой-либо проблемы, которая сработала. У кого-нибудь есть идеи? Благодаря

+0

Какая версия Python вы используете? – frasertweedale

+0

Python 2.7; работает в shell_plus --notebook, jupyter – plumSemPy

+0

[Этот вопрос] (http://stackoverflow.com/questions/30102007/what-is-special-for-a-private-key-to-be-pem-formatted) указывает, что '----- НАЧАТЬ ЧАСТНЫЙ КЛЮЧ -----' - ожидаемый формат; у вас другой формат. Попробуйте преобразовать его (я думаю, OpenSSL будет иметь инструмент). – frasertweedale

ответ

1

Изменение:

priv_rsakey = RSA.importKey(rsa_priv_file.read()) 

к:

priv_rsakey = rsa_priv_file.read() 
+0

Спасибо, что это сработало – plumSemPy

+0

Я думаю, что это более безопасно, если вы удалите заголовок и нижний колонтитул файла, так как известные заголовки файлов могут помочь разбить ключ: 'priv_rsakey = rsa_priv_file.read() .replace ("----- BEGIN RSA PRIVATE KEY ----- \ n", "") .replace ("----- END RSA PRIVATE KEY ----- \ n", "") ' – ffleandro

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