Thư viện khóa là một thư viện để truy cập các kho lưu trữ mật khẩu khác nhau theo cách thống nhất. Nó dựa trên thư viện khóa Python
Thư viện cơ sở chứa một chương trình phụ trợ dựa trên biến môi trường cơ bản. Ngoài ra, có các phần phụ trợ khác có giao diện với các cửa hàng bí mật khác có thể được cài đặt riêng
1 Giao diện người dùng
Tạo một chuỗi khóa bằng cách sử dụng phần phụ trợ được chỉ định bởi chuỗi url keyring-spec. Quy trình này sẽ đưa ra một ngoại lệ vượt qua lỗi keyring-backend-load?
người dùng = đầu vào ["Tên người dùng. "] pw = getpass. getpass["Mật khẩu. "] auth_request = { "phạm vi". [ "public_repo", "gist" ], "ghi chú". "Công cụ IPython", "note_url". "https. //github. com/ipython/ipython/tree/master/tools", } phản hồi = yêu cầu. bài đăng ['https. //api. github. com/ủy quyền', auth=[người dùng, pw], data=json. kết xuất [auth_request]] phản hồi. mã thông báo raise_for_status[] = json. tải [đáp ứng. văn bản] ['mã thông báo'] khóa. set_password['github', fake_username, token] trả lại mã thông báodef _parse_parameters[tên, tùy chọn]. """Phân tích tham số, với một bộ tên cho ngữ cảnh khóa""" cho khóa trong tùy chọn. phím[]. val = options[key] if isinstance[val, dict]. val = _parse_parameters[names + [key,], val] if isinstance[val, string_types] and len[val] > 1 and val[0] == "^". # Giải mã bí mật từ kho khóa val = val[1. ] dịch vụ = ". ". tham gia [tên] hoặc "_" nếu dịch vụ == "đàn hồi". # Trường hợp đặc biệt, do cách chúng tôi phân tích các dòng lệnh, coi đây là dịch vụ gốc = "_" logger. debug["keyring get['%s', '%s']", dịch vụ, val] val = keyring. get_password[service, val] if isinstance[val, string_types] and len[val] > 1 and val[0] == "$". # Đọc một giá trị từ môi trường val = val[1. ] tiều phu. gỡ lỗi["env['%s']", val] val = os. môi trường. tùy chọn nhận [giá trị] [khóa] = tùy chọn trả về giá trịdef write_temporary_credential[máy chủ, tài khoản, người dùng, id_token, store_temporary_credential=False]. nếu không id_token. tiều phu. gỡ lỗi ["không có mã thông báo ID nào được cung cấp khi cố lưu trữ thông tin xác thực tạm thời"] trả về nếu IS_MACOS hoặc IS_WINDOWS. nếu không khóa. tiều phu. debug["Phụ thuộc 'keyring' chưa được cài đặt, không thể cache id token. Bạn có thể gặp " "nhiều cửa sổ bật lên xác thực khi sử dụng Trình xác thực trình duyệt bên ngoài. Để tránh " "điều này, vui lòng cài đặt mô-đun khóa bằng lệnh sau. cài đặt pip " "snowflake-connector-python[secure-local-storage]"] trả về new_target = convert_target[máy chủ, người dùng] thử. móc khóa. set_password[new_target, người dùng. upper[], id_token] ngoại trừ keyring. lỗi. KeyringError như ke. tiều phu. debug["Không thể lưu id_token vào keyring, %s", str[ke]] elif IS_LINUX và store_temporary_credential. write_temporary_credential_file[máy chủ, tài khoản, người dùng, id_token] khác. tiều phu. gỡ lỗi ["tham số kết nối client_store_temporary_credential không được đặt hoặc hệ điều hành không hỗ trợ"]Python keyring lib cung cấp một cách dễ dàng để truy cập dịch vụ khóa hệ thống từ python. Nó có thể được sử dụng trong bất kỳ ứng dụng nào cần lưu trữ mật khẩu an toàn
Thư viện khóa được cấp phép theo cả giấy phép MIT và giấy phép PSF
Các dịch vụ khóa chính này được hỗ trợ bởi thư viện khóa Python
- Móc khóa Mac OS X
- Mật vụ Linux
- Kho thông tin xác thực Windows
Các triển khai khóa khác cũng được cung cấp. Để biết thêm chi tiết, duyệt nguồn
hướng dẫn cài đặt
easy_install hoặc pip
Chạy easy_install hoặc pip
$ easy_install keyring $ pip install keyring
Cài đặt nguồn
Tải xuống tarball nguồn từ https. //pypi. con trăn. org/pypi/keyring, giải nén nó, rồi chạy "setup. cài đặt py"
Sử dụng móc khóa
Cách sử dụng cơ bản của keyring khá đơn giản. chỉ cần gọi keyring. set_password và keyring. lấy mật khẩu
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'
Định cấu hình lib khóa của bạn
Python keyring lib chứa các triển khai cho một số phụ trợ. Thư viện sẽ tự động chọn keyring phù hợp nhất với môi trường hiện tại của bạn. Bạn cũng có thể chỉ định khóa bạn muốn sử dụng trong tệp cấu hình hoặc bằng cách gọi hàm
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'2
Tùy chỉnh khóa của bạn bằng tệp cấu hình
Phần này mô tả cách thay đổi tùy chọn của bạn trong tệp cấu hình
Đường dẫn tệp cấu hình
Cấu hình của lib được lưu trữ trong tệp có tên "keyringrc. cfg". Tệp này phải được tìm thấy ở một vị trí dành riêng cho nền tảng. Để xác định nơi lưu trữ tệp cấu hình, hãy chạy như sau
python -c "import keyring.util.platform_; print[keyring.util.platform_.config_root[]]"
Một số dây móc khóa cũng lưu trữ dữ liệu móc khóa trong hệ thống tệp. Để xác định nơi lưu trữ các tệp dữ liệu, hãy chạy lệnh này
python -c "import keyring.util.platform_; print[keyring.util.platform_.data_root[]]"
Cấu hình nội dung tập tin
Để chỉ định một chương trình phụ trợ khóa, hãy đặt tùy chọn khóa mặc định thành đường dẫn đầy đủ của lớp cho chương trình phụ trợ đó, chẳng hạn như
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'3
Nếu keyring-path được chỉ định, keyring sẽ thêm đường dẫn đó vào đường dẫn tìm kiếm mô-đun Python trước khi tải phần phụ trợ
Ví dụ: cấu hình này có thể được sử dụng để tải SimpleKeyring từ thư mục demo trong thanh toán dự án
[backend] default-keyring=simplekeyring.SimpleKeyring keyring-path=/home/kang/pyworkspace/python-keyring-lib/demo/
Viết phụ trợ keyring của riêng bạn
Giao diện cho phần phụ trợ được xác định bởi
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'4. Mọi chương trình phụ trợ phải xuất phát từ lớp cơ sở đó và xác định thuộc tính
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'5 và ba chức năng.
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'6,
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'7 và
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'8
Xem mô-đun
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'9 để biết thêm chi tiết về giao diện của lớp này
Đặt khóa trong thời gian chạy
Ngoài ra, khóa cho phép cấu hình theo chương trình của chương trình phụ trợ gọi api
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'2. Chương trình phụ trợ được chỉ định sau đó sẽ được sử dụng để lưu trữ và truy xuất mật khẩu
Đây là một ví dụ minh họa cách gọi
python -c "import keyring.util.platform_; print[keyring.util.platform_.config_root[]]"1
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'5
Tích hợp keyring lib với ứng dụng của bạn
giao diện API
Keyring lib có một vài chức năng
python -c "import keyring.util.platform_; print[keyring.util.platform_.config_root[]]"
2. Trả về triển khai khóa hiện được tảipython -c "import keyring.util.platform_; print[keyring.util.platform_.config_root[]]"
3. Trả về mật khẩu được lưu trữ trong keyring hoạt động. Nếu mật khẩu không tồn tại, nó sẽ trả về Không cópython -c "import keyring.util.platform_; print[keyring.util.platform_.config_root[]]"
4. Lưu trữ mật khẩu trong keyringpython -c "import keyring.util.platform_; print[keyring.util.platform_.config_root[]]"
5. Xóa mật khẩu được lưu trữ trong keyring. Nếu mật khẩu không tồn tại, nó sẽ đưa ra một ngoại lệ
Tham gia
Python keyring lib là một dự án cộng đồng mở và rất hoan nghênh những người đóng góp mới
- Kho. http. //cai Xô nhỏ. org/kang/python-keyring-lib/
- Theo dõi lỗi. http. //cai Xô nhỏ. org/kang/python-keyring-lib/issues/
- Danh sách gửi thư. http. //các nhóm. Google. com/group/python-keyring
Chạy thử nghiệm
Các thử nghiệm được chạy liên tục bằng Travis-CI
Để tự chạy thử nghiệm, bạn sẽ muốn cài đặt khóa vào một số môi trường để có thể kiểm tra nó. Ba kỹ thuật đề nghị được mô tả dưới đây
Sử dụng trình chạy pytest
Móc khóa được trang bị với bộ chạy pytest. Do đó, bạn có thể gọi các bài kiểm tra từ bất kỳ Python được hỗ trợ nào [đã cài đặt phân phối] bằng cách sử dụng lệnh này
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'0
trình chạy pytest sẽ tải xuống mọi phụ thuộc chưa được đáp ứng và chạy thử nghiệm bằng pytest
Kỹ thuật này là kỹ thuật được sử dụng bởi tập lệnh Travis-CI
Sử dụng virtualenv và pytest/nose/unittest2
Pytest và Nose là hai trình chạy thử nghiệm phổ biến sẽ khám phá các thử nghiệm và chạy chúng. Unittest [unittest2 trong Python 2. 6] cũng có chế độ khám phá các bài kiểm tra
Tuy nhiên, trước tiên, những người chạy thử nghiệm này thường cần một môi trường thử nghiệm để chạy. Bạn nên cài đặt khóa vào môi trường ảo để tránh can thiệp vào môi trường hệ thống của bạn. Để biết thêm thông tin, hãy xem tài liệu venv hoặc trang chủ virtualenv
Sau khi bạn đã tạo [hoặc chỉ định] môi trường của mình, hãy cài đặt khóa vào môi trường bằng cách chạy
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'1
Sau đó, gọi người chạy thử yêu thích của bạn, e. g
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'2
hoặc
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'3
Sử dụng bản dựng
Keyring cung cấp một buildout. cfg để sử dụng với buildout. Nếu bạn đã cài đặt bản dựng, các bài kiểm tra có thể được gọi như vậy
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'0
Để biết thêm thông tin về các tùy chọn mà tập lệnh cung cấp, hãy thực thi
>>> import keyring >>> keyring.set_password["system", "username", "password"] >>> keyring.get_password["system", "username"] 'password'1
Tín dụng
Dự án dựa trên ý tưởng của Tarek Ziade trong bài đăng này. Kang Zhang ban đầu thực hiện nó như một dự án Google Summer of Code và Tarek đã cố vấn cho Kang về dự án này