Login - GrupoBRA/SocialAPI-v2-Doc GitHub Wiki

Endpoints usados para efetuar login por um segurado

POST /v1/person/login/contact/

Retorna as informações de contato de uma pessoa, os emails e telefones, censurados

  1. Se o campo "captch-by-pass" estiver presente contendo a informação de data/hora e uma assinatura HMAC desse valor, verificar se esta assinatura foi criando utilizando o DEVICE_SIGNATURE_SECRET do OnyxERP e, verificar se a data/hora informada está dentro do intervalo de 6 horas para mais ou para menos em relação ao horário do server e seguir para o passo 3;

    • Caso contrário, retornar status code 401;
  2. Enviar uma requisição para este-endpoint utilizando o valor do campo "response-token" do payload para verificar se o captcha é válido;

    • Caso contrário, retornar status code 401;
  3. Verificar se existe na tabela "pf_cpf" um documento com a chave "pf_cpf" equivalente ao "cpf" presente no payload desta requisição.

    • Caso não exista, retornar status code 404;
  4. Consultar se a data de nascimento do cadastro retornado no item anterior é equivalente a informada no payload;

    • Caso contrário, retornar status code 403;
  5. Consultar neste endpoint as matrículas do usuário no órgão informado no payload.

    • Caso tenha matrícula de ativo ou pensionista, seguir para o próximo passo.
    • Caso tenha informado um instituidor, retornar status code 405.
    • Caso tenha informado um usuário sem matriculas, retornar status code 412.
  6. Retornar todos os emails e telefones cadastrados para o usuário, filtrando pelo oid informado no payload:

Header:

Authorization: Bearer {JWT} //token de aplicação

Body:

{
    "cpf": "123.456.789.10",
    "nascimento": "2000-12-31",
    "oid": "{oid}",
    "oeid": "{oeid}",
    "response-token": "{re-captch-response-token}",
    "re-captcha-by-pass": "2022-01-01_00:00:01-2bb18b40266e498c6009b6ca54f9c838ee8fc0f53b5cccc02340be835a8fbb05"
}

Resposta:

{
  "success": true,
    "data": {
        "SocialAPI": {
            "pf_id": "{snow_flake}",
            "emails": [
              {
                "email": "***dre@bracon***",
                "email_id": "{snow_flake}" 
              }
            ],
            "cellphones": [
              {
                "cellphones": "081*****7151",
                "cellphones_id": "{snow_flake}"
              }
            ]
        }
    }
}

200 | 400 | 401 | 403 | 404 | 405 | 412

POST /v2/person/login/contact/

Retorna as informações de contato de uma pessoa, os emails e telefones, censurados, usando apenas o CPF

  1. Enviar uma requisição para este-endpoint utilizando o valor do campo "response-token" do payload para verificar se o captcha é válido;

    • Caso contrário, retornar status code 401;
  2. Verificar se existe na tabela "pf_cpf" um documento com a chave "pf_cpf" equivalente ao "cpf" presente no payload desta requisição.

    • Caso não exista, retornar status code 404;
  3. Consultar neste endpoint as matrículas do usuário no órgão informado no payload.

    • Caso tenha matrícula de ativo ou pensionista, seguir para o próximo passo.
    • Caso tenha informado um instituidor, retornar status code 405.
    • Caso tenha informado um usuário sem matriculas, retornar status code 412.
  4. Retornar todos os emails e telefones cadastrados para o usuário, filtrando pelo oid informado no payload:

Header:

Authorization: Bearer {JWT} //token de aplicação

Body:

{
    "cpf": "123.456.789.10",
    "oid": "{oid}",
    "oeid": "{oeid}",
    "response-token": "{re-captch-response-token}"
}

Resposta:

{
  "success": true,
    "data": {
        "SocialAPI": {
            "pf_id": "{snow_flake}",
            "emails": [
              {
                "email": "***dre@bracon***",
                "email_id": "{snow_flake}" 
              }
            ],
            "cellphones": [
              {
                "cellphones": "081*****7151",
                "cellphones_id": "{snow_flake}"
              }
            ]
        }
    }
}

200 | 400 | 401 | 403 | 404 | 405 | 412

POST /v1/person/login/email/send-code/

Envia para o email o código para acessar a aplicação

  1. Verificar se existe um usuário com o pf_id informado

    *Caso não encontrado, retornar status code 404;

  2. Verificar se o email_id informado é referente a um email referente ao pf_id

    • Caso contrário, retornar status code 405;
  3. Adicionar na collection Verification Code um novo documento com as informações do email e código gerado;

  4. Enviar para o email o código de acesso a aplicação;

Header:

Authorization: Bearer {JWT} //Token aplicação

Body:

{
    "pf_id": "{snow_flake}",
    "email_id": "{snow_flake}"
}

Resposta:

200 | 404 | 405

POST /v1/person/login/cellphone/send-code/

Envia para o celular o código para acessar a aplicação

  1. Verificar se existe um usuário com o pf_id informado

    *Caso não encontrado, retornar status code 404;

  2. Verificar se o phone_id informado é referente a um celular referente ao pf_id

    • Caso contrário, retornar status code 405;
  3. Adicionar na collection Verification Code um novo documento com as informações do celular e código gerado;

  4. Enviar para o celular o código de acesso a aplicação;

Header:

Authorization: Bearer {JWT} //Token aplicação

Body:

{
    "pf_id": "{snow_flake}",
    "cellphone_id": "{snow_flake}"
}

Resposta:

200 | 404 | 405

POST /v1/person/login/

Retorna o token do usuário, com o campo superUsuario="U", indicando login de usuário segurado e status="limited", token limitado

  1. Verificar se existe na collection Verification Code um documento com o pf_id e o resource_id referente ao informado no payload.

    *Caso não encontrado, retornar status code 404;

  2. Verificar se o código informado no payload está de acordo com o código encontrado no item anterior;

    *Caso contrário, retornar status code 405;

  3. Verificar se o código informado no payload não foi expirado;

    *Caso contrário, retornar status code 412;

  4. Verificar se o código informado no payload já foi validado anteriormente;

    *Caso verdade, retornar status code 409;

  5. Verificar se na RH existe ao menos um registro de matrícula(servidor_id) vinculado ao pf_id retornado no item anterior;

    • Caso contrário, retornar status code 406;
  6. Adicionar na collection Verification Code o atributo "used" com a hora de acesso deste endpoint;

  7. Consultar neste endpoint as matrículas do usuário no órgão informado no payload.

    • Caso tenha matrícula de ativo ou pensionista, seguir para o próximo passo.
    • Caso tenha informado um pensionario ou não exista matrícula para o usuário, retornar status code 417.
  8. Validar o email ou celular pelo resource_id informado;

  9. Retornar token de usuário com validade de 15 minutos e status="limited";

Header:

Authorization: Bearer {JWT} //token de aplicação

Body:

{
    "pf_id": "{snow_flake}",
    "code": "123456",
    "resource_id": "{snow_flake}"  // email_id ou cellphone_id
    "oid": "{oid}",
    "oeid": "{oeid}"
}

Resposta:

{
    "success": true,
    "data": {
        "SocialAPI": {
            "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NjUxODg1OTEsImlzcyI6Ik9ueXhwcmV2IiwiZXhwIjoxNTY1MjMxNzkxLCJuYmYiOjE1NjUxODg1OTAsImRhdGEiOnsiYXBwIjp7ImFwaUlkIjoiMjJlNmVjYjVhZGFhIiwiYXBwQ29kIjozMiwiYXBwT3NDb2QiOjEsIm5hbWUiOiJGb3BhZyIsImFwaWtleSI6IjIyZTZlY2I1YWRhYSIsInNlY3VyaXR5IjoiSSIsImxhdW5jaGVySWdub3JlIjoiTiIsImNhY2hlIjoiSSIsInZlcnNpb24iOiIxLjAuMCJ9LCJ1c2VyIjp7InBmQ29kIjo5OTksInVzdWFyaW9Db2QiOjI1Niwib3JnYW9Db2QiOjEsIm9yZ2FvRW50aWRhZGVDb2QiOjEsInByaXZDb2QiOjE1LCJzdXBlclVzdWFyaW8iOiJTIiwibm9tZSI6IkFORFJFIFBFUkVJUkEgTEVJVEUiLCJ1dWlkIjoiZDQ2MTIwZDRlMTk1ZjJjNWE3ZGFkN2JkYjhmYTYwIiwibG9naW4iOiIwNDYyMTQ2NTM3NiIsImZvdG8iOiJodHRwczpcL1wvc3RvcmFnZS1hbHBoYTIub255eGVycC5jb20uYnJcLzJmNGJjZGJlM2I3Yjg3NzZkZjU5NDUxZmEzNDk1Yi5wbmciLCJjZWx1bGFyIjpudWxsLCJlbWFpbCI6bnVsbCwidXNlci1sZW5ndGgiOjgsInBmaWQiOiI1MDE0OTA4NjE3ODc2NjgwNzU1Iiwib2lkIjoiNTA4YjM4NjdmOTFmYTBlMzNjYmI1ODkyYjY0NDNjIiwib2VpZCI6IjYxNTNlYWM5MGQzOTI3ZjVmYWE5MWViYzM2YWRiOCIsImZ1c29Ib3JhcmlvIjoiLTMiLCJtb2VkYSI6ImJyYXppbGlhbl9yZWFsIiwiaWRpb21hIjoicHQtYnIiLCJkYXRhIjoiYnJhemlsaWFuX2RhdGVfZm9ybWF0IiwibGF1bmNoZXIiOiJfYmxhbmsifX19.yu1p6e-rdaQSejprBNjRiv8a-5P8Ko3acIGMefxjbbM"
        }
    }
}

200 | 400 | 401 | 403 | 404 | 405 | 409 | 412 | 417

Challenge

Endpoints usados para certificar que o usuário está autorizado a adicionar uma forma de contanto (email ou celular)

POST /v1/person/login/challenge/questions/

Retorna as perguntas e opções de resposta do challenge

  1. Verificar se o pf_id informado é um pf_id válido;

    • Caso contrário, retornar status code 404;
  2. Verificar se o usuário não está com bloqueio temporário e/ou permanente no challenge vigente;

    • Caso contrário, retornar status code 405;
  3. Iniciar a captura de informações do usuário para gerar as perguntas do challenge:

    • rg: data de emissão
    • nome dos pais: nome do meio, ultimo nome
    • naturalidade: cidade/UF
    • matricula: número
    • data ingresso
  4. Gerar respostas aleatórias de acordo com as perguntas;

  5. Concatenar os headers das perguntas e assinar com um HMAC;

  6. Retornar um objeto com as perguntas e respostas e a assinatura dos headers das perguntas;

Header:

Authorization: Bearer {JWT} //token de aplicação

Body:

{
    "pf_id": "{snowflake_id}",
    "oid": "{oid}",
    "oeid": "{oeid}"
}

Resposta:

{
  "success": true,
    "data": {
        "SocialAPI": {
            "questions":[
              {
                "nome_mae_meio": [
                  "pereira", "josefina", "da silva", "costa", "Ferreira"
                ]
              },
              {
                "rg_data_emissao": [
                  "2010-01-01", "2012-05-10", "2013-10-20", "2015-06-15", "2008-08-01"
                ]
              },
              {
                "naturalidade": [
                  "São Paulo - SP", "Olinda - PE", "Cuibá - MT", "Buenos Aires - PE", "Guarulhos - SP"
                ]
              },
              {
                "nome_pai_ultimo": [
                  "Silva", "Pereira", "Costa", "Filho", "Bueno"
                ]
              },
              {
                "matricula": [
                  "0123", "4569", "1290", "2100", "4232"
                ]
              }
            ],
            "signature": "6eaa3c39c802f58be2c88f46bef79d24893e5e7e73eaa144cafcee67ec8df8a8"
        }
    }
}

200 | 400 | 403 | 404

POST /v1/person/login/challenge/answers/

Envia a resposta do challenge

  1. Verificar se o usuário não está com bloqueio temporário e/ou permanente no challenge vigente;

    • Caso contrário, retornar status code 412;
  2. Verificar se a assinatura informada confere com os headers das respostas;

    • Caso contrário, retornar 400
  3. Verificar se existe um usuário com o pf_id informado;

    • Caso não encontrado, retornar status code 404;
  4. Verificar se o celular ou email informado é válido;

    • Caso contrário, retornar 406;
    • Caso seja informado celular e email, considerar apenas o celular;
  5. Verificar se o email ou celular informado já existe para outro segurado e se o mesmo já está validado;

    • Caso verdadeiro, retornar status code 409;
  6. Verificar se as respostas informadas estão corretas;

    • Caso contrário, retornar status code 405;
    • Aplicar bloqueio temporário no challenge com duração exponencial em relação ao número de tentativas incorretas;
  7. Adicionar o email ou celular ao segurado;

  8. Enviar o código de acesso a aplicação para o celular ou email informado;

Header:

Authorization: Bearer {JWT} //Token aplicação

Body:

{
    "pf_id": "{snow_flake}",
    "oid": "{oid}",
    "oeid": "{oeid}",
    "answers": [
        {
            "nome_mae_meio":"pereira"
	},
	{
	    "rg_data_emissao": "2010-01-01"
	},
	{
	    "naturalidade": "São Paulo - SP"
	},
	{
	    "nome_pai_ultimo": "Filho"
	},
	{
	    "matricula": "2100"
	}
    ],
    "cellphone": "81988776655", // ou null
    "email": "[email protected]", // ou null
    "signature": "6eaa3c39c802f58be2c88f46bef79d24893e5e7e73eaa144cafcee67ec8df8a8"  // Deve ser a mesma que foi retornada junto com as perguntas
}
{
  "success": true,
  "data": {
    "SocialAPI": {
      "resource_id": "{cellphone_id | email_id inserido}"
    }
  } 
}

Resposta:

200 | 400 | 404 | 405 | 406 | 409

User Domain

GET /v1/person/login/user-domain/

Retorna as entidades nas quais o usuário-segurado está cadastrado e possui matrícula de servidor(ativo e/ou inativo) e/ou pensionista.

  1. Verificar na RhAPI em quais órgãos o servidor possui matrícula(s);

  2. Retornar os órgãos nos quais foram encontradas matrículas para este servidor, conforme o exemplo abaixo;

Header:

Authorizarion: Bearer {JWT}

Resposta:

{
  "success": true,
  "data": {
    "SocialAPI": [
      {
        "oid": "4bf8e55d68d7fc622fa89b63d91570",
        "label": "Guarulhos/SP",
        "entidades": [
          {
            "matricula": "4940",
            "categoria": "EFETIVO",
            "servidor_id": "{snowflake-id}",
            "oeid": "3893661735371a3c49cfee472e1699",
            "label": "IPREF",
            "tipo": "RPPS" //Prefeitura|Câmara|RPPS
          }
        ]
      },
      {
        "oid": "9f9d3826d823bcc6dfb0d6fa038469",
        "label": "Mafra/SC",
        "entidades": [
          {
            "matricula": "4940",
            "categoria": "EFETIVO",
            "servidor_id": "{snowflake-id}",
            "oeid": "e184da3009889c2a5c59006a04976f",
            "label": "RPPS",
            "tipo": "RPPS" //Prefeitura|Câmara|RPPS
          }
        ]
      }
    ]
  }
}

200 | 403 | 404

Trocando de entidade

PATCH /v1/person/login/user-domain/

Troca a entidade do usuário, gerando um novo token

  1. Verificar na RhAPI em quais órgãos o servidor possui matrícula(s);

  2. Verificar se a entidade informada no payload encontra-se entre os resultados coletados no passo anterior;

    • Caso contrário, retornar status code 405;
  3. Retornar o token do usuário com as novas informações.

Header:

Authorization: Bearer {JWT}

Body:

{
    "oid": "{oid}",
    "oeid": "{oeid}"
}

Resposta:

{
    "success": true,
    "data": {
        "SocialAPI": {
            "access_token": "{JSON-WEB-TOKEN}"
        }
    }
}

200 | 400 | 404 | 405 | 406