Go

āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāđāļĨāļ°āļāļēāļĢāļĒāļ·āļ™āļĒāļąāļ™āļ•āļąāļ§āļ•āļ™

JWT, OAuth2, āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ€āļ‹āļŠāļŠāļąāļ™, RBAC, crypto/rand vs math/rand, āļāļēāļĢāļāļģāļŦāļ™āļ”āļ„āđˆāļē TLS, āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ”āļ­āļĒāđˆāļēāļ‡āļ›āļĨāļ­āļ”āļ āļąāļĒ, āđāļ™āļ§āļ›āļāļīāļšāļąāļ•āļīāļ—āļĩāđˆāļ”āļĩāļ—āļĩāđˆāļŠāļļāļ”āļ”āđ‰āļēāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ

24 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒÂ·
Senior
1

āļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļŦāļĨāļąāļāļĢāļ°āļŦāļ§āđˆāļēāļ‡āđ‚āļ—āđ€āļ„āđ‡āļ™ JWT āļāļąāļšāđ€āļ‹āļŠāļŠāļąāļ™āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāđāļšāļšāļ”āļąāđ‰āļ‡āđ€āļ”āļīāļĄāļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

āļ„āļģāļ•āļ­āļš

āđ‚āļ—āđ€āļ„āđ‡āļ™ JWT āđ€āļ›āđ‡āļ™āđāļšāļš stateless (āđ„āļĄāđˆāļĄāļĩāļŠāļ–āļēāļ™āļ°āļāļąāđˆāļ‡āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ) āđāļĨāļ°āļšāļĢāļĢāļˆāļļāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ—āļĩāđˆāļ–āļđāļāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđ„āļ§āđ‰āļ āļēāļĒāđƒāļ™āļ•āļąāļ§āđ‚āļ—āđ€āļ„āđ‡āļ™āđ€āļ­āļ‡ āļ•āđˆāļēāļ‡āļˆāļēāļāđ€āļ‹āļŠāļŠāļąāļ™āđāļšāļšāļ”āļąāđ‰āļ‡āđ€āļ”āļīāļĄāļ—āļĩāđˆāđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāđ„āļ§āđ‰āđƒāļ™āļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģāļŦāļĢāļ·āļ­āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļāļąāđˆāļ‡āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒāđ‚āļ”āļĒāļĄāļĩāđ€āļžāļĩāļĒāļ‡ session ID āļ­āļĒāļđāđˆāļāļąāđˆāļ‡āđ„āļ„āļĨāđ€āļ­āļ™āļ•āđŒ JWT āļĒāđ‰āļēāļĒāļ„āļ§āļēāļĄāļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāđƒāļ™āļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļšāđ„āļ›āļĒāļąāļ‡āđ„āļ„āļĨāđ€āļ­āļ™āļ•āđŒ āļŠāļīāđˆāļ‡āļ™āļĩāđ‰āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļāļēāļĢāļ‚āļĒāļēāļĒāđƒāļ™āđāļ™āļ§āļ™āļ­āļ™āļ—āļģāđ„āļ”āđ‰āļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļĄāļĩāļŠāļ–āļēāļ™āļ°āļ—āļĩāđˆāđƒāļŠāđ‰āļĢāđˆāļ§āļĄāļāļąāļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ

2

āļŠāļēāļĄāļŠāđˆāļ§āļ™āļ‚āļ­āļ‡āđ‚āļ—āđ€āļ„āđ‡āļ™ JWT āļ—āļĩāđˆāļ„āļąāđˆāļ™āļ”āđ‰āļ§āļĒāļˆāļļāļ”āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

āļ„āļģāļ•āļ­āļš

JWT āļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒāļŠāļēāļĄāļŠāđˆāļ§āļ™āļ—āļĩāđˆāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđāļšāļš Base64URL āđāļĨāļ°āļ„āļąāđˆāļ™āļ”āđ‰āļ§āļĒāļˆāļļāļ”: Header (āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāđāļĨāļ°āļ›āļĢāļ°āđ€āļ āļ—), Payload (claims/āļ‚āđ‰āļ­āļĄāļđāļĨ) āđāļĨāļ° Signature (āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļ§āļēāļĄāļŠāļĄāļšāļđāļĢāļ“āđŒ) āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ„āļ·āļ­ header.payload.signature āđ‚āļ”āļĒ header āļĢāļ°āļšāļļāļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļāļēāļĢāļĨāļ‡āļ™āļēāļĄ (HS256, RS256), payload āļšāļĢāļĢāļˆāļļ claims (iss, sub, exp) āđāļĨāļ° signature āļĢāļąāļšāļ›āļĢāļ°āļāļąāļ™āļ§āđˆāļēāđ‚āļ—āđ€āļ„āđ‡āļ™āđ„āļĄāđˆāļ–āļđāļāđāļāđ‰āđ„āļ‚

3

JWT claim āļĄāļēāļ•āļĢāļāļēāļ™āđƒāļ”āļ—āļĩāđˆāļāļģāļŦāļ™āļ” timestamp āļāļēāļĢāļŦāļĄāļ”āļ­āļēāļĒāļļāļ‚āļ­āļ‡āđ‚āļ—āđ€āļ„āđ‡āļ™?

āļ„āļģāļ•āļ­āļš

claim 'exp' (expiration time) āļāļģāļŦāļ™āļ” Unix timestamp āļ—āļĩāđˆāļŦāļĨāļąāļ‡āļˆāļēāļāļ™āļąāđ‰āļ™āļˆāļ°āļ•āđ‰āļ­āļ‡āđ„āļĄāđˆāļĢāļąāļšāđ‚āļ—āđ€āļ„āđ‡āļ™āļ­āļĩāļāļ•āđˆāļ­āđ„āļ› claims āļĄāļēāļ•āļĢāļāļēāļ™āļĒāļąāļ‡āļĢāļ§āļĄāļ–āļķāļ‡ 'iss' (issuer), 'sub' (subject), 'aud' (audience), 'iat' (issued at) āđāļĨāļ° 'nbf' (not before) āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļš claim exp āļĄāļĩāļ„āļ§āļēāļĄāļŠāļģāļ„āļąāļāļ­āļĒāđˆāļēāļ‡āļĒāļīāđˆāļ‡āđƒāļ™āļāļēāļĢāļˆāļģāļāļąāļ”āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āļĩāđˆāđ‚āļ—āđ€āļ„āđ‡āļ™āļĄāļĩāļœāļĨāđāļĨāļ°āļĨāļ”āļœāļĨāļāļĢāļ°āļ—āļšāļˆāļēāļāđ‚āļ—āđ€āļ„āđ‡āļ™āļ—āļĩāđˆāļ–āļđāļāļ‚āđ‚āļĄāļĒ

4

āļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļŦāļĨāļąāļāļĢāļ°āļŦāļ§āđˆāļēāļ‡ HS256 āđāļĨāļ° RS256 āđƒāļ™āļāļēāļĢāļĨāļ‡āļ™āļēāļĄ JWT āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

5

āļˆāļ°āđ€āļžāļīāļāļ–āļ­āļ™ JWT āļāđˆāļ­āļ™āļ—āļĩāđˆāļĄāļąāļ™āļˆāļ°āļŦāļĄāļ”āļ­āļēāļĒāļļāļ•āļēāļĄāļ˜āļĢāļĢāļĄāļŠāļēāļ•āļīāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđ„āļĢ?

+21 āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

āļŦāļąāļ§āļ‚āđ‰āļ­āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Go āļ­āļ·āđˆāļ™āđ†

āļžāļ·āđ‰āļ™āļāļēāļ™ Go

Junior
25 āļ„āļģāļ–āļēāļĄ

āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ Go

Junior
20 āļ„āļģāļ–āļēāļĄ

āļ­āļīāļ™āđ€āļ—āļ­āļĢāđŒāđ€āļŸāļ‹āđƒāļ™ Go

Junior
18 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ”

Junior
20 āļ„āļģāļ–āļēāļĄ

āļžāļ·āđ‰āļ™āļāļēāļ™ Goroutine

Junior
20 āļ„āļģāļ–āļēāļĄ

Channels

Junior
22 āļ„āļģāļ–āļēāļĄ

Go Modules

Mid-Level
18 āļ„āļģāļ–āļēāļĄ

āđ€āļ‹āļīāļĢāđŒāļŸāđ€āļ§āļ­āļĢāđŒ HTTP

Mid-Level
24 āļ„āļģāļ–āļēāļĄ

āđ„āļ„āļĨāđ€āļ­āļ™āļ•āđŒ HTTP

Mid-Level
18 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠ JSON

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

Database/SQL

Mid-Level
22 āļ„āļģāļ–āļēāļĄ

āđāļžāđ‡āļāđ€āļāļˆ context

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

Testing

Mid-Level
22 āļ„āļģāļ–āļēāļĄ

āļĢāļđāļ›āđāļšāļš Concurrency

Mid-Level
24 āļ„āļģāļ–āļēāļĄ

āđ„āļžāļĢāļĄāļīāļ—āļĩāļŸāļāļēāļĢāļ‹āļīāļ‡āđ‚āļ„āļĢāđ„āļ™āļ‹āđŒ

Mid-Level
22 āļ„āļģāļ–āļēāļĄ

āđ€āļŸāļĢāļĄāđ€āļ§āļīāļĢāđŒāļāđ€āļ§āđ‡āļš Go

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļ­āļ­āļāđāļšāļš REST API

Mid-Level
20 āļ„āļģāļ–āļēāļĄ

gRPC

Mid-Level
22 āļ„āļģāļ–āļēāļĄ

Reflection

Senior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģ

Senior
24 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢāļ—āļģāļ‡āļēāļ™

Senior
22 āļ„āļģāļ–āļēāļĄ

Generics

Senior
20 āļ„āļģāļ–āļēāļĄ

Go Design Patterns

Senior
24 āļ„āļģāļ–āļēāļĄ

Microservices

Senior
24 āļ„āļģāļ–āļēāļĄ

Docker & Containerization

Senior
20 āļ„āļģāļ–āļēāļĄ

Kubernetes Basics

Senior
22 āļ„āļģāļ–āļēāļĄ

Go āļ‚āļąāđ‰āļ™āļŠāļđāļ‡

Senior
20 āļ„āļģāļ–āļēāļĄ

āļāļēāļĢāļžāļąāļ’āļ™āļē CLI

Senior
20 āļ„āļģāļ–āļēāļĄ

āđ€āļŠāļĩāđˆāļĒāļ§āļŠāļēāļ Go āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ„āļĢāļąāđ‰āļ‡āļ–āļąāļ”āđ„āļ›

āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ„āļģāļ–āļēāļĄāļ—āļąāđ‰āļ‡āļŦāļĄāļ” flashcards āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„ āđāļšāļšāļāļķāļāļŦāļąāļ” code review āđāļĨāļ°āļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ

āđ€āļĢāļīāđˆāļĄāđƒāļŠāđ‰āļŸāļĢāļĩ