Almacenamiento de la entrada de usuario / contraseña ingresada en un script de Greasemonkey durante la instalación

Estoy haciendo un script de Greasemonkey que se comunica con el administrador de tickets de Redmine a través de la API REST. Como el usuario necesita iniciar sesión para obtener los datos de Redmine, necesito una forma de preguntarle al usuario sus credenciales en la instalación del script y guardarlas en el script.

¿Se puede lograr esto sin pedirle al usuario que edite los valores directamente en el script?

EDITAR:
Como ya hay una respuesta a esta pregunta, voy a validar la respuesta dada a continuación, ya que es un muy buen marco.

Aquí hay un marco para obtener y almacenar credenciales de inicio de sesión. La secuencia de comandos solicita la información en la primera ejecución y la almacena, cifrada, usando GM_setValue() .

También agrega dos elementos al menú contextual de Greasemonkey para permitir cambiar el nombre de usuario o la contraseña.

 // ==UserScript== // @name _Autologin, sensitive info framework // @include http://YOUR_SERVER.COM/YOUR_PATH/* // @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js // @require http://crypto.stanford.edu/sjcl/sjcl.js // @grant GM_getValue // @grant GM_setValue // @grant GM_registerMenuCommand // ==/UserScript== var encKey = GM_getValue ("encKey", ""); var usr = GM_getValue ("lognUsr", ""); var pword = GM_getValue ("lognPwd", ""); if ( ! encKey) { encKey = prompt ( 'Script key not set for ' + location.hostname + '. Please enter a random string:', '' ); GM_setValue ("encKey", encKey); usr = pword = ""; // New key makes prev stored values (if any) unable to decode. } usr = decodeOrPrompt (usr, "U-name", "lognUsr"); pword = decodeOrPrompt (pword, "P-word", "lognPwd"); function decodeOrPrompt (targVar, userPrompt, setValVarName) { if (targVar) { targVar = unStoreAndDecrypt (targVar); } else { targVar = prompt ( userPrompt + ' not set for ' + location.hostname + '. Please enter it now:', '' ); GM_setValue (setValVarName, encryptAndStore (targVar) ); } return targVar; } function encryptAndStore (clearText) { return JSON.stringify (sjcl.encrypt (encKey, clearText) ); } function unStoreAndDecrypt (jsonObj) { return sjcl.decrypt (encKey, JSON.parse (jsonObj) ); } //-- Add menu commands that will allow U and P to be changed. GM_registerMenuCommand ("Change Username", changeUsername); GM_registerMenuCommand ("Change Password", changePassword); function changeUsername () { promptAndChangeStoredValue (usr, "U-name", "lognUsr"); } function changePassword () { promptAndChangeStoredValue (pword, "P-word", "lognPwd"); } function promptAndChangeStoredValue (targVar, userPrompt, setValVarName) { targVar = prompt ( 'Change ' + userPrompt + ' for ' + location.hostname + ':', targVar ); GM_setValue (setValVarName, encryptAndStore (targVar) ); } // ADD YOUR CODE TO SET THE USERNAME AND PASSWORD ON THE LOGIN PAGE, HERE. 

Importante:

  1. Iniciar sesión con un usuario siempre conlleva riesgos.
  2. Este marco reduce en gran medida ese riesgo, pero los mecanismos de almacenamiento disponibles para Greasemonkey y Tampermonkey no son seguros y los proveedores de navegadores CYA contra el almacenamiento de información confidencial . Si un tipo malo obtiene tanto su usuario como los datos de su navegador, entonces puede realizar una ingeniería inversa de su contraseña. Por supuesto, si él tiene eso, de todos modos es probable que haya comprado una de sus máquinas.
  3. Lo más inteligente es utilizar un administrador de contraseñas como LastPass , KeePass , etc.
  4. Lo peor que puede hacer es almacenar las credenciales en un UserScript. Incluso un invitado puede verlos y será “pirateado”, garantizado.