Lib js feita em Vanilla JS para facilitar o processo de autenticação e renovação de token no SSO da Wiz.
Está api faz uso de node, para configurar localmente o projeto é necessário executar o seguinte comando, na raiz do projeto:
> npm install
├── src
├── index.js
├── lib
├── sso-conector.js
index.js -> Arquivo padrão de exportação da lib. sso-conector.js -> arquivo aonde estão as principais classes do projeto:
- HttpConnector: Classe auxiliar que encapsula a complexidade de uma chamada http em modo js puro.
- SSOConector: Classe que contém a regra negocial do funcionamento de conexão e renovação de token para o SSO.
Essa lib foi preparada para uso via empacotamento logo ela poderá ser utilizada via importação. Para fazer a instalação do package via npm basta executar o comando:
> npm install 'git+https://github.com/wizsolucoes/vanilla-wiz-sso.git' --save
Para utilizá-la basta importar a classe utilizando o código a seguir:
import SSOConector from 'vanilla-wiz-sso';
Para utilizar os recursos da classe é necessário criar uma instância da classe. Para isso é obrigatório passar um objeto config conforme o exemplo a seguir:
import SSOConector from 'vanilla-wiz-sso';
var sso = new SSOConector(config);
O objeto config deve possuir as seguintes propriedades
- apiPath: url principal do SSO, exemplo: http://wiz-sso.com.br
- client_id: cliente id para o SSO
- grant_type: tipo de login a ser executado, exemplo: passowrd
- client_secret: chave secreta da api, exemplo: @#%WESEWqwert==
- scope: o scope de acesso para qual será utilizado o token gerado
- options: configurações opcionais que podem ou não ser passadas, este campo não é obrigatório.
No campo options existem os seguintes campos:
- autoRefreshToken: valor booleano que indentifica se o token deve ser renovado quando expirado, por padrão seu valor é true
- ssoTimeout: valor, em millesegundos, que identifica quanto tempo a requisição de login ou renovação de token deve aguardar até considerar que houve um timeout. Por padrão esse valor é 60000 (um minuto).
-
static onAutoRefreshFail propriédade estática que dispara erro caso a renovação automática de token falhe.
-
static getToken(); método estático que retorna o token do usuário logado, caso o login ainda não tenha sido efetuado retorna null.
-
isLogged(); método da classe que retorna um objeto Promise, no caso do usuário estar logado o retorno do promise será um objeto token.
-
loginWithCredentials(username, password) método que efetua o login do usuário baseado em seu usuário e senha. Retorna um objeto Promise, no caso do usuário estar logado o retorno do promise será um objeto token.
-
refreshToken() método que efetua a renovação do token atual. Retorna um objeto Promise, no caso do usuário estar logado o retorno do promise será um objeto token.
-
logOut() método que remove o token logado do usuário e suspende o controle de renovação de token.
O objeto token é composto das seguintes propriedades:
- tokenType: tipo do token retornado pelo SSO, normalmente um token do tipo Bearer
- hash: propriamente a cifra do token retornado
- expiresIn: numero em formato timestamp que representa o tempo de validade do token.
- refreshToken: hash utilizado para renovar o token.
import SSOConector from 'vanilla-wiz-sso';
// instanciar a classe com os parametros necessários
var sso = new SSOConector({
apiPath: 'http://wiz-sso.com.br',
client_id: 'wiz_key',
grant_type: 'password',
client_secret: 'af324589+++===',
scope: 'wiz-corp',
options: {
autoRefreshToken: true,
ssoTimeout: 60000
}
});
// callback para monitorar o erro ao renovar um token.
SSOConector.onAutoRefreshFail = () => { console.log('vixi...') }
SSOConector.getToken(); // recuperar token caso ele exista.
// verificar se o usuário está logado
sso.isLogged()
.then({
token => {
//logar usuário
}, error => {
//erro ao recuperar usuário ou não há usuário logado
}
});
// logand usuário
sso.loginWithCredentials('fulano@fulano.com.br', 'senha')
.then(
token => {
//usuário logou
}, error => {
// erro ao logar usuário
}
);
// renovação de token após logado.
sso.refreshToken()
.then(
token => {
// usuário logado
}, error => {
// erro ao renovar token do usuário
}
);
// deslogar usuário da sessão
sso.logOut();