2016-03-31 14 views
1

私は基本的にいくつかのREST APIのラッパーになるPythonコマンドラインツールを設計しています。一般的な考え方は、ユーザーが端末を離れずにリモートで変更できるようにすることです。コマンドラインツール用のユーザーのリモート資格情報をキャッシュする

リモートクレームを行うたびにusernamepasswordを入力する必要がないように、ユーザーの資格情報をキャッシュする方法がわかりません。私は、ツールを使用していないユーザーの資格情報を長期間公開しておくことを心配しています。ファイルを作成せずに一定の時間が経過した後にファイルを破壊するスレッドを作成することなくこれを行う典型的な方法はありますか?

答えて

1

私は、あなたには、いくつかのユーティリティ機能とそれを包むことができ、は、PyPIからkeyringパッケージを使用することをお勧め:

SERVICE_NAME = 'confluence_api' 


def get_login_cli(username = None, prompt = False): 
    ''' 
    Get the password for the username out of the keyring. If the password 
    isn't found in the keyring, ask for it from the command line. 
    ''' 

    disp_username = False 

    if username is None or prompt: 
     username = getpass.getuser() 
     disp_username = True 

    passwd = keyring.get_password(SERVICE_NAME, username) 

    if passwd is None or prompt: 

     if disp_username: 
      print 'login: %s' % username 

     passwd = getpass.getpass() 
     set_password(username, passwd) 

    return (username, passwd) 


def set_password(username, passwd): 
    ''' 
    Writes the password to the keyring. 
    ''' 

    keyring.set_password(SERVICE_NAME, username, passwd) 

そして、あなたのランタイムスクリプトはそうのようにそれを呼び出すことができます。

username, passwd = get_login_cli(username, **kwargs) 

print("username = %s" % (username)) 

ログイン後、パスワードはキャッシュされ、2度目のプロンプトは表示されません。 keyringは、資格情報を保存するためにネイティブプラットフォームのキーリングを使用しています。私はN時間が経過した後に再びメッセージを表示しますが、keyringのドキュメントを読んで、Nを知る必要があります。

関連する問題