single9 / oauth2-pgsql

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

OAuth2 with PostgreSQL

主要使用技術

  • Express.js
  • PostgreSQL
  • Nunjucks

安裝

npm install

docker-compose up -d
npm run setup

執行

GOOGLE_CLIENT_ID=<GOOGLE_CLIENT_ID> \
GOOGLE_CLIENT_SECRET=<GOOGLE_CLIENT_SECRET> \
FACEBOOK_CLIENT_ID=<FACEBOOK_CLIENT_ID> \
FACEBOOK_CLIENT_SECRET=<FACEBOOK_CLIENT_SECRET> \
npm start

授權流程

Authorization Code Grant

link: https://oauth2-server.readthedocs.io/en/latest/model/overview.html#authorization-code-grant

generateAccessToken(client, user, scope, [callback])
generateRefreshToken(client, user, scope, [callback])
generateAuthorizationCode(client, user, scope, [callback])
*getAuthorizationCode(authorizationCode, [callback])
*getClient(clientId, clientSecret, [callback])
*saveToken(token, client, user, [callback])
*saveAuthorizationCode(code, client, user, [callback])
*revokeAuthorizationCode(code, [callback])
validateScope(user, client, scope, [callback])

*必備的 Function

Flow

-> *getClient (1st, get client data from db)
-> generateAuthorizationCode
-> *saveAuthorizationCode
-> *getClient (2nd)
-> *getAuthorizationCode
-> *revokeAuthorizationCode (Authorization Code 的任務完成)
-> validateScope (驗證使用者範疇)
-> *saveToken (儲存 token)

Refresh Token

Params

  • client_id: Your client id
  • client_secret: Your client secret
  • refresh_token: Your refresh token
  • grant_type: refresh_token

Flow

-> *getClient
-> *getRefreshToken
-> generateRefreshToken
-> *saveToken

Password

Params

  • username: Your username
  • password: Your password
  • client_id: Your client id
  • client_secret: Your client secret
  • grant_type: password

Flow

-> *getClient
-> *getUSer
-> validateScope
-> *saveToken

Client Credentials Grant

params

  • client_id: Your client id
  • client_secret: Your client secret
  • grant_type: client_credentials

Flow

-> *getClient
-> *getUserFromClient
-> validateScope
-> *saveToken

授權

  1. 藉由上面的各種方式取得 Access Token
  2. 做資料操作時,在 Header 加入授權資訊
Authorization: Bearer <Accrss Token>
  1. 授權驗證無問題的話就會看到資料了

目前 Access Token 預設存活 15 分鐘

  1. 社群帳號登入機制為登入即註冊
  2. 帳號機制採用 Email 作為 Primary Key,無論何種登入方式,只要 Email 對了就可以登入。

TODO

  • 實作 OAuth2 基本功能
  • 使用 DB 儲存 token, code
  • 設計與建立 User 資料表
  • 使 Clinet 與 User 有關聯
  • 使 Token 與 User 和 Client 有關聯
  • 使用者註冊畫面
  • Google, Facebook 登入註冊串接
  • 使用者登入畫面
  • 使用者個人管理畫面
  • OAuth2 串接應用範例
  • 伺服器整體儀表板畫面
  • 逾期 Token, Auth Code 清除機制
  • 伺服器部署腳本

About

License:MIT License


Languages

Language:JavaScript 94.2%Language:CSS 5.5%Language:HTML 0.3%Language:Dockerfile 0.0%