Auth System
Diagram: Auth System · 43 elements
{
"type": "excalidraw",
"version": 2,
"source": "https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor",
"elements": [
{
"id": "AFIzm_D50EFQt3qKuBPIQ",
"type": "text",
"x": 398,
"y": 126,
"width": 123.83992004394531,
"height": 75,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a0",
"roundness": null,
"seed": 1038205074,
"version": 17,
"versionNonce": 1610214798,
"isDeleted": false,
"boundElements": null,
"updated": 1768092851885,
"link": null,
"locked": false,
"text": "Auth System\n\n",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Auth System\n\n",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "VWqL7v61GtMALZaf7iYML",
"type": "text",
"x": 391,
"y": 268,
"width": 505.51959228515625,
"height": 200,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a1",
"roundness": null,
"seed": 642707534,
"version": 201,
"versionNonce": 137294414,
"isDeleted": false,
"boundElements": null,
"updated": 1768092908739,
"link": null,
"locked": false,
"text": "Functional Req\n- Register using email and password\n- Login using email and password\n- Supports MFA\n- System authenticate user and apply authorization\n- System maintains audit data\n\n",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Functional Req\n- Register using email and password\n- Login using email and password\n- Supports MFA\n- System authenticate user and apply authorization\n- System maintains audit data\n\n",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "w40A7HCl_J8OUf02O6B4h",
"type": "text",
"x": 1069,
"y": 250,
"width": 244.77978515625,
"height": 125,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a2",
"roundness": null,
"seed": 1306060050,
"version": 145,
"versionNonce": 1012424978,
"isDeleted": false,
"boundElements": null,
"updated": 1768092957171,
"link": null,
"locked": false,
"text": "Non Functional Req\n- Scale: 1M req/sec\n- Availability>Consistency\n- Security of credentials\n- Low Latency < 100ms",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Non Functional Req\n- Scale: 1M req/sec\n- Availability>Consistency\n- Security of credentials\n- Low Latency < 100ms",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "j6N_nuj3t1kwjTCa3kQaf",
"type": "text",
"x": 411,
"y": 488,
"width": 197.9198455810547,
"height": 175,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a3",
"roundness": null,
"seed": 1011680654,
"version": 88,
"versionNonce": 120759630,
"isDeleted": false,
"boundElements": null,
"updated": 1768092986909,
"link": null,
"locked": false,
"text": "Core Entities\n- User\n- Role\n- Permissions\n- Session and Token\n- Audit Event\n",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Core Entities\n- User\n- Role\n- Permissions\n- Session and Token\n- Audit Event\n",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "d-85SVpJALLB8IglZ2uLO",
"type": "text",
"x": 422,
"y": 737,
"width": 426.459716796875,
"height": 650,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a4",
"roundness": null,
"seed": 251830802,
"version": 524,
"versionNonce": 1682009998,
"isDeleted": false,
"boundElements": null,
"updated": 1768093230471,
"link": null,
"locked": false,
"text": "API Routes\n\n1. Register\nPOST /api/v1/auth/register\n{email,password}->userId&message\n\n2. Login\nPOST /api/v1/auth/login\n{email,password}->JWT and refresh token\n\n3. Verify MFA\nPOST /api/v1/auth/mfa/verify\n{challengeId,OTP}->JWT and refresh token\n\n4. OAuth Redirect\nGET /api/v1/oauth/google\n\n5. OAuth Redirect\nGET /api/v1/oauth/google/callback?code=\n\n6. Refresh Token\nPOST /api/v1/auth/token/refresh\n{refreshToken}->JWTToken\n\n7. POST /api/v1/auth/logout\n{refresh_token}->success/failure",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "API Routes\n\n1. Register\nPOST /api/v1/auth/register\n{email,password}->userId&message\n\n2. Login\nPOST /api/v1/auth/login\n{email,password}->JWT and refresh token\n\n3. Verify MFA\nPOST /api/v1/auth/mfa/verify\n{challengeId,OTP}->JWT and refresh token\n\n4. OAuth Redirect\nGET /api/v1/oauth/google\n\n5. OAuth Redirect\nGET /api/v1/oauth/google/callback?code=\n\n6. Refresh Token\nPOST /api/v1/auth/token/refresh\n{refreshToken}->JWTToken\n\n7. POST /api/v1/auth/logout\n{refresh_token}->success/failure",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "hWP0_on9LvPDH0p_XZtNe",
"type": "rectangle",
"x": 1242.8955864559425,
"y": 696.511009939194,
"width": 110.20135252457817,
"height": 119.72969683716724,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a5",
"roundness": {
"type": 3
},
"seed": 1861071438,
"version": 37,
"versionNonce": 1297317390,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "xEAv3yf_ku6ybO12TrCV_"
},
{
"id": "6LE_Qh7-vrwN5_QMd94yl",
"type": "arrow"
}
],
"updated": 1768093530683,
"link": null,
"locked": false
},
{
"id": "xEAv3yf_ku6ybO12TrCV_",
"type": "text",
"x": 1275.7762843857122,
"y": 743.8758583577776,
"width": 44.43995666503906,
"height": 25,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a5V",
"roundness": null,
"seed": 2100402574,
"version": 6,
"versionNonce": 2145425166,
"isDeleted": false,
"boundElements": null,
"updated": 1768093324519,
"link": null,
"locked": false,
"text": "User",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "hWP0_on9LvPDH0p_XZtNe",
"originalText": "User",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "iHaYQ5sgCCiRINZj6h8CQ",
"type": "rectangle",
"x": 1545.423060628333,
"y": 611.8287396477458,
"width": 198.4020936080817,
"height": 289.18575833662,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a6",
"roundness": {
"type": 3
},
"seed": 1386266898,
"version": 140,
"versionNonce": 1360646798,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "0uyTe2nIrLA1_MGy9auRl"
},
{
"id": "OErsxXLKI05szaZcF52xd",
"type": "arrow"
},
{
"id": "6LE_Qh7-vrwN5_QMd94yl",
"type": "arrow"
}
],
"updated": 1768093530683,
"link": null,
"locked": false
},
{
"id": "0uyTe2nIrLA1_MGy9auRl",
"type": "text",
"x": 1568.4141693830575,
"y": 668.9216188160558,
"width": 152.4198760986328,
"height": 175,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a6V",
"roundness": null,
"seed": 1062429198,
"version": 195,
"versionNonce": 519539986,
"isDeleted": false,
"boundElements": null,
"updated": 1768093320943,
"link": null,
"locked": false,
"text": "API Gateway\n\n- verify JWT\n- verify expiry\n- retrive userId\n- roles\n- rate limit",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "iHaYQ5sgCCiRINZj6h8CQ",
"originalText": "API Gateway\n\n- verify JWT\n- verify expiry\n- retrive userId\n- roles\n- rate limit",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "kN78-l23KDwBDTJmIEgcJ",
"type": "rectangle",
"x": 2006.1596925544736,
"y": 552.9604523205535,
"width": 237.60863736175094,
"height": 160,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a7",
"roundness": {
"type": 3
},
"seed": 1351534990,
"version": 70,
"versionNonce": 1309560398,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "VQXRXMwKmW5xFjNaS9MZC"
},
{
"id": "ejRC1k_oVgTgf2EDt1vsl",
"type": "arrow"
},
{
"id": "6HtJErZkwQAMV3tUz4BW7",
"type": "arrow"
},
{
"id": "bSEhr4T7raA0kPCiiqCuP",
"type": "arrow"
},
{
"id": "aVOoaBzdPO67c5vd4cNE5",
"type": "arrow"
},
{
"id": "YCuKHJAn45pJsTNBN480Y",
"type": "arrow"
},
{
"id": "OErsxXLKI05szaZcF52xd",
"type": "arrow"
}
],
"updated": 1768093517417,
"link": null,
"locked": false
},
{
"id": "VQXRXMwKmW5xFjNaS9MZC",
"type": "text",
"x": 2027.154082341306,
"y": 570.4604523205535,
"width": 195.61985778808594,
"height": 125,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a8",
"roundness": null,
"seed": 329784402,
"version": 122,
"versionNonce": 1056300238,
"isDeleted": false,
"boundElements": null,
"updated": 1768093465575,
"link": null,
"locked": false,
"text": "Auth Service\n- Password login\n- OAuth login\n- MFA orchestration\n- Token generation",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "kN78-l23KDwBDTJmIEgcJ",
"originalText": "Auth Service\n- Password login\n- OAuth login\n- MFA orchestration\n- Token generation",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "pseQyYbsnWTUTQ2QAQto_",
"type": "rectangle",
"x": 2377.5312339587,
"y": 898.0756596638339,
"width": 177.25059289283536,
"height": 54.078692694076494,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a9",
"roundness": {
"type": 3
},
"seed": 1623207438,
"version": 125,
"versionNonce": 984994450,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "Y7NIjlZM3T42ES_BC7ETJ"
},
{
"id": "YCuKHJAn45pJsTNBN480Y",
"type": "arrow"
},
{
"id": "u3Abdjat1V0lVhwbXIGon",
"type": "arrow"
}
],
"updated": 1768093496900,
"link": null,
"locked": false
},
{
"id": "Y7NIjlZM3T42ES_BC7ETJ",
"type": "text",
"x": 2438.7065563450587,
"y": 912.6150060108721,
"width": 54.89994812011719,
"height": 25,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "a9V",
"roundness": null,
"seed": 1610193422,
"version": 74,
"versionNonce": 1793859662,
"isDeleted": false,
"boundElements": null,
"updated": 1768093431292,
"link": null,
"locked": false,
"text": "Kafka",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "pseQyYbsnWTUTQ2QAQto_",
"originalText": "Kafka",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "0Zagzl9vDFYT5Scur1DfQ",
"type": "rectangle",
"x": 2767.2272966556525,
"y": 871.636283769776,
"width": 188.0602300372134,
"height": 116.49087329014526,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aA",
"roundness": {
"type": 3
},
"seed": 1666659026,
"version": 76,
"versionNonce": 1175180818,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "Zh3LX2IYUD5lxhfOPZIl9"
},
{
"id": "u3Abdjat1V0lVhwbXIGon",
"type": "arrow"
}
],
"updated": 1768093496900,
"link": null,
"locked": false
},
{
"id": "Zh3LX2IYUD5lxhfOPZIl9",
"type": "text",
"x": 2823.3274495160563,
"y": 917.3817204148486,
"width": 75.85992431640625,
"height": 25,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aAV",
"roundness": null,
"seed": 1534901774,
"version": 48,
"versionNonce": 1092437518,
"isDeleted": false,
"boundElements": null,
"updated": 1768093433225,
"link": null,
"locked": false,
"text": "Workers",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "0Zagzl9vDFYT5Scur1DfQ",
"originalText": "Workers",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "Lw0Xh440aB_7YiS6X1hZn",
"type": "ellipse",
"x": 2407.051814043488,
"y": 371.42871433102613,
"width": 176.02014501468875,
"height": 153.76022431003804,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aC",
"roundness": {
"type": 2
},
"seed": 992415630,
"version": 45,
"versionNonce": 1629354578,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "hWxpIwJxFYp0JVdUWBge2"
},
{
"id": "bSEhr4T7raA0kPCiiqCuP",
"type": "arrow"
}
],
"updated": 1768093482018,
"link": null,
"locked": false
},
{
"id": "hWxpIwJxFYp0JVdUWBge2",
"type": "text",
"x": 2479.419379064849,
"y": 435.9463778428489,
"width": 30.819976806640625,
"height": 25,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aD",
"roundness": null,
"seed": 933069970,
"version": 6,
"versionNonce": 387334926,
"isDeleted": false,
"boundElements": null,
"updated": 1768093421237,
"link": null,
"locked": false,
"text": "DB",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "Lw0Xh440aB_7YiS6X1hZn",
"originalText": "DB",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "OOOsa3D7rRGkBfcCq5VRz",
"type": "ellipse",
"x": 2468.2793072196873,
"y": 658.9467581881747,
"width": 132.99514524247434,
"height": 117.53827933517914,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aE",
"roundness": {
"type": 2
},
"seed": 121787026,
"version": 64,
"versionNonce": 1705524942,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "2p4ByWHEtZClA5eqd1Kjc"
},
{
"id": "6HtJErZkwQAMV3tUz4BW7",
"type": "arrow"
}
],
"updated": 1768093478135,
"link": null,
"locked": false
},
{
"id": "2p4ByWHEtZClA5eqd1Kjc",
"type": "text",
"x": 2508.106024299702,
"y": 705.1598406723124,
"width": 53.29994201660156,
"height": 25,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aF",
"roundness": null,
"seed": 72719698,
"version": 15,
"versionNonce": 776191630,
"isDeleted": false,
"boundElements": null,
"updated": 1768093438205,
"link": null,
"locked": false,
"text": "Redis",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "OOOsa3D7rRGkBfcCq5VRz",
"originalText": "Redis",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "dcS84zkXibbppPhiXnyQ5",
"type": "rectangle",
"x": 2050.87782928298,
"y": 862.4943611048689,
"width": 156.25162703851674,
"height": 90.59553840006151,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "dashed",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aG",
"roundness": {
"type": 3
},
"seed": 350797586,
"version": 49,
"versionNonce": 69362702,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "_CEdHGKCfjWAV2XZVOu4P"
},
{
"id": "ejRC1k_oVgTgf2EDt1vsl",
"type": "arrow"
}
],
"updated": 1768093471820,
"link": null,
"locked": false
},
{
"id": "_CEdHGKCfjWAV2XZVOu4P",
"type": "text",
"x": 2073.8137013959886,
"y": 882.7921303048996,
"width": 110.3798828125,
"height": 50,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "dashed",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aGV",
"roundness": null,
"seed": 1556082770,
"version": 27,
"versionNonce": 2123277582,
"isDeleted": false,
"boundElements": null,
"updated": 1768093467259,
"link": null,
"locked": false,
"text": "OTP\nVerification",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "dcS84zkXibbppPhiXnyQ5",
"originalText": "OTP Verification",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "cqwW1GIrNGMG2ygiHfVcM",
"type": "rectangle",
"x": 2042.8087351399283,
"y": 243.35027610577367,
"width": 169.445892508724,
"height": 122.38380341730152,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "dashed",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aH",
"roundness": {
"type": 3
},
"seed": 322560850,
"version": 37,
"versionNonce": 309879250,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "GuffzjER4dxTFQzkxmVg_"
},
{
"id": "aVOoaBzdPO67c5vd4cNE5",
"type": "arrow"
}
],
"updated": 1768093486952,
"link": null,
"locked": false
},
{
"id": "GuffzjER4dxTFQzkxmVg_",
"type": "text",
"x": 2067.121708249759,
"y": 279.54217781442446,
"width": 120.8199462890625,
"height": 50,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "dashed",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aI",
"roundness": null,
"seed": 2065064334,
"version": 22,
"versionNonce": 40403726,
"isDeleted": false,
"boundElements": null,
"updated": 1768093454609,
"link": null,
"locked": false,
"text": "Google Auth\nService",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "cqwW1GIrNGMG2ygiHfVcM",
"originalText": "Google Auth Service",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "ejRC1k_oVgTgf2EDt1vsl",
"type": "arrow",
"x": 2119.25920743667,
"y": 720.8555737431833,
"width": 0.005084495364371833,
"height": 141.52184396830796,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aJ",
"roundness": {
"type": 2
},
"seed": 1106333842,
"version": 49,
"versionNonce": 1830740370,
"isDeleted": false,
"boundElements": null,
"updated": 1768093472806,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
0.005084495364371833,
141.52184396830796
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "kN78-l23KDwBDTJmIEgcJ",
"focus": 0.048043906214947876,
"gap": 7.895121422629813
},
"endBinding": {
"elementId": "dcS84zkXibbppPhiXnyQ5",
"focus": -0.12463891207974534,
"gap": 1
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": false
},
{
"id": "6HtJErZkwQAMV3tUz4BW7",
"type": "arrow",
"x": 2250.2459770102687,
"y": 669.6547054252678,
"width": 212.24208998954782,
"height": 41.49965116294197,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aK",
"roundness": {
"type": 2
},
"seed": 1035001682,
"version": 60,
"versionNonce": 428572814,
"isDeleted": false,
"boundElements": null,
"updated": 1768093478135,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
212.24208998954782,
41.49965116294197
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "kN78-l23KDwBDTJmIEgcJ",
"focus": 0.11816257202549783,
"gap": 6.477647094044187
},
"endBinding": {
"elementId": "OOOsa3D7rRGkBfcCq5VRz",
"focus": -0.10551661947516719,
"gap": 6.162699749673853
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": false
},
{
"id": "bSEhr4T7raA0kPCiiqCuP",
"type": "arrow",
"x": 2247.8664331798027,
"y": 554.9688279894284,
"width": 164.04615843189958,
"height": 76.82672495369457,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aL",
"roundness": {
"type": 2
},
"seed": 1638984402,
"version": 31,
"versionNonce": 651386002,
"isDeleted": false,
"boundElements": null,
"updated": 1768093482018,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
164.04615843189958,
-76.82672495369457
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "kN78-l23KDwBDTJmIEgcJ",
"focus": -0.15064625682828733,
"gap": 13.052998656830642
},
"endBinding": {
"elementId": "Lw0Xh440aB_7YiS6X1hZn",
"focus": 0.07711876191777123,
"gap": 1.8392051544800732
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": false
},
{
"id": "aVOoaBzdPO67c5vd4cNE5",
"type": "arrow",
"x": 2142.8004209731093,
"y": 545.206596890084,
"width": 0.17287284238409484,
"height": 173.04571522660746,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aM",
"roundness": {
"type": 2
},
"seed": 1427923470,
"version": 57,
"versionNonce": 1741751886,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "-U-Wt_Z9vcrMkmADbiGa9"
}
],
"updated": 1768093514787,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
0.17287284238409484,
-173.04571522660746
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "kN78-l23KDwBDTJmIEgcJ",
"focus": 0.14929433652034363,
"gap": 7.753855430469457
},
"endBinding": {
"elementId": "cqwW1GIrNGMG2ygiHfVcM",
"focus": -0.18292542795826677,
"gap": 6.426802140401378
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": false
},
{
"id": "-U-Wt_Z9vcrMkmADbiGa9",
"type": "text",
"x": 2091.346886996352,
"y": 446.18373927678033,
"width": 103.07994079589844,
"height": 25,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aMV",
"roundness": null,
"seed": 766757710,
"version": 11,
"versionNonce": 1192704014,
"isDeleted": false,
"boundElements": null,
"updated": 1768093511793,
"link": null,
"locked": false,
"text": "For OAuth",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "aVOoaBzdPO67c5vd4cNE5",
"originalText": "For OAuth",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "YCuKHJAn45pJsTNBN480Y",
"type": "arrow",
"x": 2240.829491595692,
"y": 718.9132965140428,
"width": 141.923519102083,
"height": 181.15040083720896,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aN",
"roundness": {
"type": 2
},
"seed": 480844562,
"version": 47,
"versionNonce": 231503122,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "5TzxUOZ5WpcHH7s4OD--W"
}
],
"updated": 1768093509125,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
141.923519102083,
181.15040083720896
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "kN78-l23KDwBDTJmIEgcJ",
"focus": -0.2673843179794177,
"gap": 13.986305998551
},
"endBinding": {
"elementId": "pseQyYbsnWTUTQ2QAQto_",
"focus": -0.5807960670998821,
"gap": 1
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": false
},
{
"id": "5TzxUOZ5WpcHH7s4OD--W",
"type": "text",
"x": 2205.501326525152,
"y": 784.4884969326473,
"width": 212.57984924316406,
"height": 50,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aNV",
"roundness": null,
"seed": 148676750,
"version": 32,
"versionNonce": 148957326,
"isDeleted": false,
"boundElements": null,
"updated": 1768093506101,
"link": null,
"locked": false,
"text": "Put register and login\nevents",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "YCuKHJAn45pJsTNBN480Y",
"originalText": "Put register and login events",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "u3Abdjat1V0lVhwbXIGon",
"type": "arrow",
"x": 2561.3255723853144,
"y": 928.9334620294171,
"width": 206.18137151537167,
"height": 0.35591467549693334,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aO",
"roundness": {
"type": 2
},
"seed": 1637392782,
"version": 46,
"versionNonce": 2101456978,
"isDeleted": false,
"boundElements": null,
"updated": 1768093496900,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
206.18137151537167,
0.35591467549693334
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "pseQyYbsnWTUTQ2QAQto_",
"focus": 0.13438248057811655,
"gap": 6.543745533779202
},
"endBinding": {
"elementId": "0Zagzl9vDFYT5Scur1DfQ",
"focus": 0.00737076210145043,
"gap": 1
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": false
},
{
"id": "OErsxXLKI05szaZcF52xd",
"type": "arrow",
"x": 1747.3283715423777,
"y": 709.1917413776125,
"width": 260.18888127434866,
"height": 52.90925876030087,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aP",
"roundness": {
"type": 2
},
"seed": 1689717902,
"version": 59,
"versionNonce": 686584530,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "majLOO0Lbn4FZtbMJI2Q8"
}
],
"updated": 1768093526721,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
260.18888127434866,
-52.90925876030087
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "iHaYQ5sgCCiRINZj6h8CQ",
"focus": -0.15989420032028154,
"gap": 3.5032173059630622
},
"endBinding": {
"elementId": "kN78-l23KDwBDTJmIEgcJ",
"focus": 0.005383129065200062,
"gap": 1.3575602622527185
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": false
},
{
"id": "majLOO0Lbn4FZtbMJI2Q8",
"type": "text",
"x": 1812.582869247423,
"y": 670.2371119974621,
"width": 129.6798858642578,
"height": 25,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aQ",
"roundness": null,
"seed": 1449412882,
"version": 16,
"versionNonce": 19326226,
"isDeleted": false,
"boundElements": null,
"updated": 1768093523996,
"link": null,
"locked": false,
"text": "register/login",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "OErsxXLKI05szaZcF52xd",
"originalText": "register/login",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "6LE_Qh7-vrwN5_QMd94yl",
"type": "arrow",
"x": 1358.3949831500613,
"y": 757.1690396345987,
"width": 184.04856319482678,
"height": 5.298044169539935,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aR",
"roundness": {
"type": 2
},
"seed": 1681541266,
"version": 68,
"versionNonce": 714378318,
"isDeleted": false,
"boundElements": null,
"updated": 1768093530683,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
184.04856319482678,
-5.298044169539935
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "hWP0_on9LvPDH0p_XZtNe",
"focus": 0.04120074258776268,
"gap": 5.298044169540617
},
"endBinding": {
"elementId": "iHaYQ5sgCCiRINZj6h8CQ",
"focus": 0.050810999812036316,
"gap": 2.9795142834448143
},
"startArrowhead": null,
"endArrowhead": "arrow",
"elbowed": false
},
{
"id": "EiMfPv_A9z3AerGcMQjeF",
"type": "text",
"x": 3012.5135220174093,
"y": 868.6110090280516,
"width": 350.51971435546875,
"height": 150,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aS",
"roundness": null,
"seed": 21838034,
"version": 85,
"versionNonce": 751487954,
"isDeleted": false,
"boundElements": null,
"updated": 1768093566984,
"link": null,
"locked": false,
"text": "Audit Logs\n\nevent_id UUID,\nuser_id UUID\n\nip_address, user_agent, created_at",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Audit Logs\n\nevent_id UUID,\nuser_id UUID\n\nip_address, user_agent, created_at",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "THor9f1kbaBHks3D-PSv9",
"type": "text",
"x": 2387.730731659369,
"y": 340.14889885020983,
"width": 503.5196228027344,
"height": 25,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aT",
"roundness": null,
"seed": 626771218,
"version": 63,
"versionNonce": 614199698,
"isDeleted": false,
"boundElements": null,
"updated": 1768093590600,
"link": null,
"locked": false,
"text": "User, Role, Permission, RoleToPermission, UserRoles",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "User, Role, Permission, RoleToPermission, UserRoles",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "9moj9KVG0Jft4QqvYxSQ8",
"type": "text",
"x": 2748.282466928488,
"y": 420.8500092714566,
"width": 176.079833984375,
"height": 200,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aU",
"roundness": null,
"seed": 2000739598,
"version": 114,
"versionNonce": 1560446798,
"isDeleted": false,
"boundElements": null,
"updated": 1768093628716,
"link": null,
"locked": false,
"text": "Users\n- id (PK)\n- email\n- password\n- is_email_verified\n- is_active\n- created_at\n- updated_at",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Users\n- id (PK)\n- email\n- password\n- is_email_verified\n- is_active\n- created_at\n- updated_at",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "Q5_c-Y2Aq45blaIB2lbMN",
"type": "text",
"x": 2964.35318192731,
"y": 426.0565325244403,
"width": 153.45989990234375,
"height": 125,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aV",
"roundness": null,
"seed": 1575116818,
"version": 61,
"versionNonce": 440592658,
"isDeleted": false,
"boundElements": null,
"updated": 1768093656254,
"link": null,
"locked": false,
"text": "Roles\n- roleID (PK)\n- roleName(uniq)\n- description\n",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Roles\n- roleID (PK)\n- roleName(uniq)\n- description\n",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "iXpBSQc7WboTIeBmqPWGH",
"type": "text",
"x": 2991.687429005474,
"y": 583.553860927196,
"width": 182.77984619140625,
"height": 100,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aW",
"roundness": null,
"seed": 1745943950,
"version": 57,
"versionNonce": 1230011278,
"isDeleted": false,
"boundElements": null,
"updated": 1768093673449,
"link": null,
"locked": false,
"text": "Permission\n- permissionID(PK)\n- resource\n- action",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Permission\n- permissionID(PK)\n- resource\n- action",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "rpbaJWDAqfvWX-Y-AR5Er",
"type": "text",
"x": 3309.2853474374774,
"y": 411.73859357873516,
"width": 125.79991149902344,
"height": 150,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aX",
"roundness": null,
"seed": 2101600210,
"version": 70,
"versionNonce": 560082066,
"isDeleted": false,
"boundElements": null,
"updated": 1768093698865,
"link": null,
"locked": false,
"text": "JWT\n- keyID (PK)\n- publicKey\n- privateKey\n- isActive\n- createdAt",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "JWT\n- keyID (PK)\n- publicKey\n- privateKey\n- isActive\n- createdAt",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "_oMOlEDezt9FIwvUof2hB",
"type": "text",
"x": 3309.2853474374774,
"y": 588.7603841801797,
"width": 86.39993286132812,
"height": 100,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aY",
"roundness": null,
"seed": 64393742,
"version": 42,
"versionNonce": 786610766,
"isDeleted": false,
"boundElements": null,
"updated": 1768093717868,
"link": null,
"locked": false,
"text": "UserRole\n- userId\n- roleId\n- scope",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "UserRole\n- userId\n- roleId\n- scope",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "yDlhTAnaSndTKxVME-IIs",
"type": "text",
"x": 3551.388678701218,
"y": 411.73859357873516,
"width": 168.89987182617188,
"height": 75,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aZ",
"roundness": null,
"seed": 559389970,
"version": 49,
"versionNonce": 469725458,
"isDeleted": false,
"boundElements": null,
"updated": 1768093733034,
"link": null,
"locked": false,
"text": "RoleToPermission\n- role_id\n- permissionId",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "RoleToPermission\n- role_id\n- permissionId",
"autoResize": true,
"lineHeight": 1.25
},
{
"id": "1Inj1_DCjsMIQ3t-bh-8t",
"type": "text",
"x": 3530.5625856892825,
"y": 772.290328847854,
"width": 1201.7991943359375,
"height": 100,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"index": "aa",
"roundness": null,
"seed": 312669582,
"version": 298,
"versionNonce": 30895566,
"isDeleted": false,
"boundElements": null,
"updated": 1768093809808,
"link": null,
"locked": false,
"text": "Points\n- Password hash contains info on algo, salt value (random num) and final hash\n- One login, system fetch this password hash and retrive dtails from this hash to compute final hash form given password,\nif final hash in passwordHash and current one matched login is successul.",
"fontSize": 20,
"fontFamily": 5,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Points\n- Password hash contains info on algo, salt value (random num) and final hash\n- One login, system fetch this password hash and retrive dtails from this hash to compute final hash form given password,\nif final hash in passwordHash and current one matched login is successul.",
"autoResize": true,
"lineHeight": 1.25
}
],
"appState": {
"gridSize": 20,
"gridStep": 5,
"gridModeEnabled": false,
"viewBackgroundColor": "#ffffff"
},
"files": {}
}