Вращение ключа учетной записи службы GCP - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь реализовать Key Rotation для учетных записей службы GCP.Мне удалось создать новый ключ и затем декодировать privateKeyData, который закодирован в base64, который имеет фактический файл SA JSON.Теперь, когда я читаю файл обратно для аутентификации, он выдает мне эту ошибку:

'У объекта Unicode нет iterKeys ()'

Проблема с json.dumps Я думаю.

data = base64.b64decode(key['privateKeyData']).decode('utf-8')
print data  # this prints expected output


with open('file.json', mode='w') as out:
    str = json.dumps(data)
    print out  # this adds \n,\\ to the output
    out.write(str)

Ошибка:

AttributeError: 'unicode' object has no attribute 'iterkeys'

Пустой фрагмент того, как файл конвертируется после json.dumps:

"{\n  \"type\": \"service_account\",\n  \"project_id\": \"testproj\",\n  \"private_key_id\": \6866996939\"}"\n

1 Ответ

0 голосов
/ 03 декабря 2018

Функция json.dumps() обычно используется для превращения dict в строку, представляющую JSON:

>>> json.dumps({"foo": "bar"})
'{"foo": "bar"}'

Но вместо этого вы даете ей строку, которая заставляет ее экранировать кавычки:

>>> json.dumps('{"foo": "bar"}')
'"{\\"foo\\": \\"bar\\"}"'

Вместо этого вы должны просто написать data в файл:

with open('file.json', mode='w') as out:
    out.write(data)

Кажется, у вас может быть вторая проблема, которая вызывает исключение, вы должны включить полныйtraceback в вашем ответе, а не только в последней строке.

...