Giter Site home page Giter Site logo

auth3's Introduction

Auth3

Auth3 é uma api para autenticação de usuários integrada ao AWS Cognito.

Início Rápido

git clone https://github.com/realfabecker/auth3 auth3
cd auth3/backend
docker-compose up 

Instalação e Uso

O uso recomendado do projeto é por seu ambiente Docker. Pode-se também ser realizada instalação manual, porém essa irá exigir a instalação local em seu ambiente do Go 1.18.

Para ambas as situações e necessário se assegurar da correta configuração das variáveis de ambiente base para integração com as apis da aws.

Execução a partir de containers Docker

Clone o repositório em seu ambiente local e realize a compilação do projeto:

#!/bin/bash

docker compose build

Com o projeto disponível será possível inicializar a ambiente com suas configurações padrão:

#!/bin/bash

docker compose up

Execução local com Golang

Assegure-se de ter o Go 1.18 devidamente instalado caso optado por não utilizar os containers do projeto.

Tendo realizado o clone do projeto realize a instalação das dependências de aplicação

#!/bin/bash

go mod download

Instale também as dependências de desenvolvimento para viabilizar o trabalho em ambiente local

#!/bin/bash

bash dev.bash

Crie um arquivo .env local para desenvolvimento e exporte suas configurações

#!/bin/bash

cat <<'EOL' > .env.local
APP_PORT=3001
APP_NAME=auth3
APP_HOST=localhost:3001
COGNITO_CLIENT_ID=123456
COGNITO_JWK_URL=https://cognito-idp.us-east-1.amazonaws.com/us-east-123456/.well-known/jwks.json
EOL

export $(cat .env.local)

Com isso inicie o projeto em modo watch considerando cenário de desenvolvimento

#!/bin/bash

air -c air.toml

Acesso ao projeto localmente

A partir da instalação do projeto este terá sua interface http na porta 3001

#!/bin/bash

curl -v http://localhost:3001/auth3/status

A interface openapi do projeto pode ser acessada por http://localhost:3001/docs

open api documentation

Compilação

Esse serviço pode ser compilado considerando os seguintes cenários de execução:

  • Execução como api HTTP
#!/bin/bash

cd backend
make build-http
  • Execução como função Lambda
#!/bin/bash

cd backend
make build-lambda
  • Execução como autorizador lambda
#!/bin/bash

cd backend
make build-auth4

A compilação como serviço http permite tanto seu uso em produção quanto seu desenvolvimento local, já a compilação como função lambda permite apenas o uso em produção.

A compilação como auth4 permite o uso do aplicativo em contexto de middleware de autorização das chamadas realizadas por meio de uma api gateway, responsável por validação de tokens gerados em contexto http ou lambda.

Diagramas de Sequência

/auth/login

sequenceDiagram
    actor User
    User ->> API: POST /auth/login [email,password]
    activate User
    activate API
    API ->> Cognito: InitiateAuth USER_PASSWORD_AUTH
    activate Cognito
    alt authorized
        Cognito -->> API: success(AccessToken)
        API -->> User: success(AccessToken)
    else unauthorized
        Cognito -->> API: error(Unauthorized)
        deactivate Cognito
        API -->> User: error(Unauthorized)
    end
    deactivate User
    deactivate API
Loading

/auth/forgot

sequenceDiagram
    actor User
    User ->> API: POST /auth/forgot [email]
    activate User
    activate API
    API ->> Cognito: ForgotPassword [email]
    activate Cognito
    Note over Cognito, E-mail: Envio async de reset code
    Cognito ->> E-mail: Send password reset code
    Cognito -->> API: success(Delivery Medium)
    deactivate Cognito
    API -->> User: success(Delivery Medium)
    deactivate API
    deactivate User
Loading

/auth/change

sequenceDiagram
    actor User
    User ->> API: POST /auth/change [email, new-password, code]
    activate User
    activate API
    API ->> Cognito: ConfirmForgotPassword [email, new-password, code]
    activate Cognito
    alt invalid_reset_code     
        Cognito -->> API: error(invalid code provided)
        API -->> User: error(invalid code provided)
    else password_changed     
        Cognito -->> API: success         
        API -->> User: success
    end
    deactivate Cognito
    deactivate API
    deactivate User
Loading

auth4

sequenceDiagram
    actor User
    User->>Gateway: Endpoint access
    activate User
    activate Gateway
    Gateway->>Auth4: Verify Token
    activate Auth4
    Auth4->>Cognito: Verify Token (Jwk)
    activate Cognito
    alt token_is_invalid
        Cognito-->>Auth4: error(invalid token)
        Auth4-->>Gateway: error(invalid token)
        Gateway-->>User: error(invalid token)
    else token_is_valid
        Cognito-->>Auth4: success
        deactivate Cognito
        Auth4-->>Gateway: success
        deactivate Auth4
        Gateway->>Destination: forward request
        activate Destination
        Destination-->>User: reply request
        deactivate Destination
    end

    deactivate Gateway
    deactivate User
Loading

Publicação

A publicação desse serviço em produção deve ser realizada por meio do projeto caterpillar.

Dependências

  • Fiber - Web framework
  • dig - Injeção de dependências
  • swag - Documentação openapi

Contribuições

Refira-se ao guia de contribuições para detalhes de como contribuir para o projeto.

Versionamento

O projeto utilizada SemVer para o versionamento. Para todas as versões disponíveis verifique as tags nesse repositório.

Licença

Este projeto considera a licença MIT. Verifique a Licença para mais informações.

auth3's People

Contributors

realfabecker avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.