new AuthToken(scope [, data])
Esta classe é responsável por gerar um token de autorização para ser executado posteriormente em um outro script. O token de autorização é um mecanismo que permite o usuário do sistema delegar uma autorização de login para uso posterior ou em outro Engine. Com a posse do token, um script pode "logar" na sessão em nome do usuário que autorizou o token.
Tokens de autorização apresentam as seguintes vantagens em relação ao uso de credenciais:
- Eles não expõem a senha do usuário em variáveis de ambientes, códigos-fontes ou parametrizações.
- Eles podem ser revogados de forma individual pelo usuário.
- Eles podem ser configurados para ter um escopo de utilização mais restrito que o do usuário, limitando assim o seu uso e os riscos do token ser interceptado e utilizado para outros fins.
O escopo de um token de autorização é configurado por meio de uma lista de identificadores separada por espaço. Via de regra, os escopos são identificadores opacos para o Engine e o desenvolvedor pode livremente defini-los. A validação e tratamento desses escopos deve ser implementadas pos APIs de mais alto nível que utilizem o token de autorização. No entanto, há dois formatos especiais que são interpretados e validados diretamente pelo Engine. São eles:
'vfs:ikey?<CHAVE>'
'ufs:<path>'
Escopos com prefixos vfs:
ou ufs:
definem os scripts autorizados a utilizarem o token.
O método module:@nginstack/engine/lib/session/Session~Session#loginByAuthToken falhará
se o script que realizou o login não satisfizer ao menos um dos scripts autorizados por meio
desses escopos. Como os identificadores de escopos não podem conter espaços, é recomendado
que esses caracteres sejam removidos do caminho do script utilizando a função escape
.
Após um token ter sido criado, ele deve ser autorizado através dos métodos module:@nginstack/engine/lib/security/Security~Security#authorizeToken ou module:@nginstack/engine/lib/session/Session~Session#authorizeToken.
Um token de autorização pode ser atualizado através do método module:@nginstack/engine/lib/security/Security~Security#updateAuthToken onde é permitido alterar as suas propriedades.
Caso um token não seja mais desejado, ele pode ser revogado através do método module:@nginstack/engine/lib/security/Security~Security#revokeAuthToken.
Parameters:
Name | Type | Argument | Description |
---|---|---|---|
scope |
string | Array.<string> | number | DBKey | Lista separada por espaço dos identificadores
dos escopos de uso autorizados por este token. Caso seja informado um |
|
data |
string |
<optional> |
Dados opcionais vinculados ao token. |
- See:
-
- module:@nginstack/engine/lib/security/Security~Security#authorizeToken
- module:@nginstack/engine/lib/security/Security~Security#restoreAuthToken
- module:@nginstack/engine/lib/security/Security~Security#updateAuthToken
- module:@nginstack/engine/lib/security/Security~Security#revokeAuthToken
- module:@nginstack/engine/lib/security/Security~Security#revokeAuthTokenByKey
- module:@nginstack/engine/lib/session/Session~Session#authorizeToken
- module:@nginstack/engine/lib/session/Session~Session#updateAuthToken
- module:@nginstack/engine/lib/session/Session~Session#revokeAuthTokenByKey
- module:@nginstack/engine/lib/session/Session~Session#loginByAuthToken
- module:@nginstack/engine/lib/runner/ScriptRunner~ScriptRunner#loginByAuthToken
Examples
// Authorize multiple scopes const AuthToken = require('@nginstack/engine/lib/security/AuthToken'); const token = new AuthToken('console.read console.write console.admin'); token.description = 'Console API'; token.expires = new Date(Date.now() + 10 * Duration.DAY_MS); session.authorizeToken(token);
// Authorize multiple scripts const AuthToken = require('@nginstack/engine/lib/security/AuthToken'); const token = new AuthToken([ scriptKey, 'ufs:' + escape(scriptPath) ]); token.description = 'Atualização de valores relativos aos produtos.'; token.expires = new Date(Date.now() + 10 * Duration.DAY_MS); session.authorizeToken(token);
// Authorize a VFS script const AuthToken = require('@nginstack/engine/lib/security/AuthToken'); const token = new AuthToken(AUTHORIZED_SCRIPT_KEY, '{num: 10}'); token.description = 'Atualização de valores relativos aos produtos.'; token.expires = new Date(Date.now() + 10 * Duration.DAY_MS); session.authorizeToken(token);
Members
-
data :string
-
Dados vinculados ao token.
Type:
- string
-
description :string
-
Descrição que indique o propósito de utilização deste token.
Type:
- string
-
expires :Date
-
Data de validade deste token. Por padrão, o token terá validade de 30 dias. Caso seja informado
null
, será desativado o controle de expiração e o token será válido até ser revogado.Type:
- Date
-
scope :string
-
Lista separada por espaço dos escopos de uso autorizados por este token.
Type:
- string
-
userKey :number|DBKey
-
Chave do usuário que autorizou o token. A sessão que logar utilizando este token, irá executar em nome deste usuário.
Type:
- number | DBKey