بحث فمنیستی جالبی رو شاهد بودم.
از این شروع شد که زن و مرد باید حقوق اجتماعی برابری داشته باشن و بهشون متفاوت نگاه نشه ، تهش به این ختم شد که چون زنا هورمونشون بهم میریزه کارهای سخت نباید انجام بدن ، مرخصی بیشتر باید داشته باشن و توی خونه هم اکثرا استراحت کنن.
دیگه کامل میشه مطمن شد توی مغز این نوع فمنیستها ، جز پهن چیز دیگهای نیست.
از این شروع شد که زن و مرد باید حقوق اجتماعی برابری داشته باشن و بهشون متفاوت نگاه نشه ، تهش به این ختم شد که چون زنا هورمونشون بهم میریزه کارهای سخت نباید انجام بدن ، مرخصی بیشتر باید داشته باشن و توی خونه هم اکثرا استراحت کنن.
دیگه کامل میشه مطمن شد توی مغز این نوع فمنیستها ، جز پهن چیز دیگهای نیست.
نمیدونم چه جوری بگم چرا ، ولی خودتون رو عذاب بدید و Vi یا Vim یاد بگیرید.
خوندنش ۱ ساعت بیشتر طول نمیکشه ولی یاد گرفتنش احتمالا چند ماه یا چند سالی زمان ببره.
خوندنش ۱ ساعت بیشتر طول نمیکشه ولی یاد گرفتنش احتمالا چند ماه یا چند سالی زمان ببره.
رقصنده با کد
نمیدونم چه جوری بگم چرا ، ولی خودتون رو عذاب بدید و Vi یا Vim یاد بگیرید. خوندنش ۱ ساعت بیشتر طول نمیکشه ولی یاد گرفتنش احتمالا چند ماه یا چند سالی زمان ببره.
Vim Text Editor Cheat Sheet
1. Basic Modes :
i : Insert mode (start typing)
Esc : Exit Insert mode to Normal mode
: : Enter Command-line mode
2. File Operations :
:e filename : Open a file
:w : Save the current file
:w filename : Save as a new file
:q : Quit Vim
:q! : Quit without saving
:wq or :x : Save and quit
:e! : Reload the current file
:x : Save and quit (shortened version of :wq)
3. Navigation:
h : Move left
j : Move down
k : Move up
l : Move right
w : Jump forward to the beginning of the next word
b : Jump backward to the beginning of the previous word
e : Jump forward to the end of the current/next word
0 : Go to the beginning of the line
^ : Go to the first non-blank character of the line
$ : Go to the end of the line
gg : Go to the beginning of the file
G : Go to the end of the file
Ctrl + f : Scroll forward one page
Ctrl + b : Scroll backward one page
Ctrl + d : Scroll down half a page
Ctrl + u : Scroll up half a page
4. Editing:
x : Delete character under the cursor
dd : Delete current line
yy : Copy (yank) current line
p : Paste after the cursor
P : Paste before the cursor
u : Undo last change
Ctrl + r : Redo undone change
r : Replace a single character
R : Enter Replace mode
~ : Switch case of character under the cursor
J : Join next line to the current line
5. Search and Replace:
/pattern : Search forward for ‘pattern’
?pattern : Search backward for ‘pattern’
n : Repeat search in the same direction
N : Repeat search in the opposite direction
:%s/old/new/g : Replace all occurrences of ‘old’ with ‘new’ in the file
:%s/old/new/gc : Replace all occurrences with confirmation
6. Visual Mode:
v : Start visual mode (character-wise)
V : Start visual line mode
Ctrl + v : Start visual block mode
d : Delete selected text
y : Yank (copy) selected text
: Indent selected text
< : Unindent selected text
7. Undo and Redo:
u : Undo last change
Ctrl + r : Redo undone change
U : Undo all changes on the current line
8. Marks and Jumps:
m{a-z} : Set mark ‘a’ to ‘z’ at the cursor position
’a : Jump to the beginning of the line where mark ‘a’ is set
`a : Jump to the exact position where mark ‘a’ is set
Ctrl + o : Jump to the previous location in the jump list
Ctrl + i : Jump to the next location in the jump list
9. Registers:
“a : Access register ‘a’
“* : Access the system clipboard (requires Vim compiled with clipboard support)
“0 : Access the unnamed register (last deleted or yanked text)
10. Command-line Mode:
: : Enter command-line mode
:h keyword : Open help for ‘keyword’
:q : Quit Vim
:w : Save the current file
:wq : Save and quit
:e filename : Open a file
:set option : Set an option
:set nu : Show line numbers
:set nonu : Hide line numbers
1. Basic Modes :
i : Insert mode (start typing)
Esc : Exit Insert mode to Normal mode
: : Enter Command-line mode
2. File Operations :
:e filename : Open a file
:w : Save the current file
:w filename : Save as a new file
:q : Quit Vim
:q! : Quit without saving
:wq or :x : Save and quit
:e! : Reload the current file
:x : Save and quit (shortened version of :wq)
3. Navigation:
h : Move left
j : Move down
k : Move up
l : Move right
w : Jump forward to the beginning of the next word
b : Jump backward to the beginning of the previous word
e : Jump forward to the end of the current/next word
0 : Go to the beginning of the line
^ : Go to the first non-blank character of the line
$ : Go to the end of the line
gg : Go to the beginning of the file
G : Go to the end of the file
Ctrl + f : Scroll forward one page
Ctrl + b : Scroll backward one page
Ctrl + d : Scroll down half a page
Ctrl + u : Scroll up half a page
4. Editing:
x : Delete character under the cursor
dd : Delete current line
yy : Copy (yank) current line
p : Paste after the cursor
P : Paste before the cursor
u : Undo last change
Ctrl + r : Redo undone change
r : Replace a single character
R : Enter Replace mode
~ : Switch case of character under the cursor
J : Join next line to the current line
5. Search and Replace:
/pattern : Search forward for ‘pattern’
?pattern : Search backward for ‘pattern’
n : Repeat search in the same direction
N : Repeat search in the opposite direction
:%s/old/new/g : Replace all occurrences of ‘old’ with ‘new’ in the file
:%s/old/new/gc : Replace all occurrences with confirmation
6. Visual Mode:
v : Start visual mode (character-wise)
V : Start visual line mode
Ctrl + v : Start visual block mode
d : Delete selected text
y : Yank (copy) selected text
: Indent selected text
< : Unindent selected text
7. Undo and Redo:
u : Undo last change
Ctrl + r : Redo undone change
U : Undo all changes on the current line
8. Marks and Jumps:
m{a-z} : Set mark ‘a’ to ‘z’ at the cursor position
’a : Jump to the beginning of the line where mark ‘a’ is set
`a : Jump to the exact position where mark ‘a’ is set
Ctrl + o : Jump to the previous location in the jump list
Ctrl + i : Jump to the next location in the jump list
9. Registers:
“a : Access register ‘a’
“* : Access the system clipboard (requires Vim compiled with clipboard support)
“0 : Access the unnamed register (last deleted or yanked text)
10. Command-line Mode:
: : Enter command-line mode
:h keyword : Open help for ‘keyword’
:q : Quit Vim
:w : Save the current file
:wq : Save and quit
:e filename : Open a file
:set option : Set an option
:set nu : Show line numbers
:set nonu : Hide line numbers
خوب یا بد ، دوستان لطف دارن و خیلی میان با من دردودل میکنن. مخصوصا از طریق این کانال.
مشکل مشترک اکثرشون هم یک چیزه : حس میکنن دارن از بازار عقب میفتن.
همین موضوع باعث استرس شدیدشون شده در حدی که بعضی نفرات چیزایی رو که بلدن هم کم کم دارن فراموش میکنن. باور کنید یا نه ، دلیلش خودتونید.
چطور؟
وقتی هر کسی یک میکروفن دستش میگیره و در مورد تکنولوژی مهمل میگه و شما بهش اهمیت میدید ، این اتفاق میفته. به جرات میگم ۹۰٪ چرندیاتی که توی کنفرانسها و همایشات و دورهمیها و وبینارها و پادکستها و ... گفته میشه ، از تجربه نیومده. از یک کنفرانس دیگه اومده یا در بهترین حالت از سرچ اومده. اونم احتمالا شب قبلش.
مطلب هم هر چی مزخرفتر ، کنجکاوی و هیجان شرکت کنندگان بیشتر.
هیجان مدیریت نشده هم میشه افسردگی و استرس.
توی هر جمعی (چه حضوری و چه آنلاین) ، اگر یک میکروفن یا یک سکو و تریبون دیدید ، به سرعت اون جمع رو ترک کنید. همین.
در خصوص استرس هم بگم که اگر حداقل روزی ۱۰ صفحه مطالعه کنید سر سال ۳۶۵۰ صفحه مطالعه کردید. و این عملا میشه تمام یک تکنولوژی. ( البته همراه با تمرین.)
و به راحتی همیشه از نصف بیشتر مارکت جلوترید.
اگر هم مطالعه نمیکنید که استرس رو داشته باشید چون طبیعیه و دارید عقب میمونید.
مشکل مشترک اکثرشون هم یک چیزه : حس میکنن دارن از بازار عقب میفتن.
همین موضوع باعث استرس شدیدشون شده در حدی که بعضی نفرات چیزایی رو که بلدن هم کم کم دارن فراموش میکنن. باور کنید یا نه ، دلیلش خودتونید.
چطور؟
وقتی هر کسی یک میکروفن دستش میگیره و در مورد تکنولوژی مهمل میگه و شما بهش اهمیت میدید ، این اتفاق میفته. به جرات میگم ۹۰٪ چرندیاتی که توی کنفرانسها و همایشات و دورهمیها و وبینارها و پادکستها و ... گفته میشه ، از تجربه نیومده. از یک کنفرانس دیگه اومده یا در بهترین حالت از سرچ اومده. اونم احتمالا شب قبلش.
مطلب هم هر چی مزخرفتر ، کنجکاوی و هیجان شرکت کنندگان بیشتر.
هیجان مدیریت نشده هم میشه افسردگی و استرس.
توی هر جمعی (چه حضوری و چه آنلاین) ، اگر یک میکروفن یا یک سکو و تریبون دیدید ، به سرعت اون جمع رو ترک کنید. همین.
در خصوص استرس هم بگم که اگر حداقل روزی ۱۰ صفحه مطالعه کنید سر سال ۳۶۵۰ صفحه مطالعه کردید. و این عملا میشه تمام یک تکنولوژی. ( البته همراه با تمرین.)
و به راحتی همیشه از نصف بیشتر مارکت جلوترید.
اگر هم مطالعه نمیکنید که استرس رو داشته باشید چون طبیعیه و دارید عقب میمونید.
رقصنده با کد
چه خبر؟ از زمان این پست تا الان میتونستید حدود ۳۶۰ صفحه بخونید. یعنی میتونستید یک کتابی مثل linux for hackers رو مطالعه کنید و یک دور هم مرور کنید. نشد؟ اشکال نداره. از امروز استارت بزنید.
بیاید روزی ۱۰ صفحه رو به روزی ۳ صفحه تقلیل بدیم. میشه تقریبا روزی ۱ ربع. تمرین کردنش هم ۱ ربع در نظر بگیرید میشه نیم ساعت. در بدترین حالت دیگه ۱ ساعت.
این ۳ صفحه هم همش احتمالا نوشته نیست و کلی کد و نمودارو تصویر قاطیشه.
سر سال میشه حدود ۱۰۰۰ صفحه.
رفرنس C ، حدودا ۸۰۰ صفحهاس.
رفرنس جاوااسکریپت حدود ۹۰۰ صفحهاس.
رفرنس لینوکس حدودا ۶۰۰ صفحهاس.
رفرنس نتوورک پلاس حدود ۶۰۰ صفحهاس.
رفرنس نستجیاس حدود ۵۰۰ صفحهاس.
رفرنس بقیه چیزها هم احتمالا در همین حده. یکیش رو استارت بزنید.
اگر سر سال هیچ کدوم رو نتونستید انجام بدید ، دیگه تصمیم بگیرید غر نزنید و به شرایط موجودتون اعتراض نکنید.
شاید کسی متوجه نشه ولی خودتون میدونید که شایسته شرایط بهتر نیستید احتمالا.
این ۳ صفحه هم همش احتمالا نوشته نیست و کلی کد و نمودارو تصویر قاطیشه.
سر سال میشه حدود ۱۰۰۰ صفحه.
رفرنس C ، حدودا ۸۰۰ صفحهاس.
رفرنس جاوااسکریپت حدود ۹۰۰ صفحهاس.
رفرنس لینوکس حدودا ۶۰۰ صفحهاس.
رفرنس نتوورک پلاس حدود ۶۰۰ صفحهاس.
رفرنس نستجیاس حدود ۵۰۰ صفحهاس.
رفرنس بقیه چیزها هم احتمالا در همین حده. یکیش رو استارت بزنید.
اگر سر سال هیچ کدوم رو نتونستید انجام بدید ، دیگه تصمیم بگیرید غر نزنید و به شرایط موجودتون اعتراض نکنید.
شاید کسی متوجه نشه ولی خودتون میدونید که شایسته شرایط بهتر نیستید احتمالا.
نکست ورژن جدید داد بیرون. البته هنوز بتاست ولی احتمالا دو هفته دیگه توی کنفرانسش رسمی منتشر میشه.
یادگیریشون واقعا هیج توجیه منطقی نداره. همون جاوا و سی و سی پلاس پلاس اینجور چیزا خوبن که هم آپدیتاشون کمه ، هم واقعا حس برنامهنویسی میده ، هم فضای کار استیبلتری داره و هم اینکه حقوقاشون هم خیلی بالاتره.
البته بماند که خیلی سختره و موقعیت شغلی کمتره
یادگیریشون واقعا هیج توجیه منطقی نداره. همون جاوا و سی و سی پلاس پلاس اینجور چیزا خوبن که هم آپدیتاشون کمه ، هم واقعا حس برنامهنویسی میده ، هم فضای کار استیبلتری داره و هم اینکه حقوقاشون هم خیلی بالاتره.
البته بماند که خیلی سختره و موقعیت شغلی کمتره
وقتی با Vim یه فایل رو باز میکنی (مثلاً hello.c)، ویم به صورت خودکار یه فایل موقتی با اسم مشابه و پسوند .swp میسازه، مثل:
.hello.c.swp
این فایل برای محافظت از تغییراتت ساخته میشه.
یعنی اگه موقع ویرایش برق بره، سیستم کرش کنه یا ویم ناگهانی بسته بشه، دفعهی بعد که فایل رو باز میکنی، ویم میگه:
Swap file ".hello.c.swp" already exists!
و ازت میپرسه که میخوای تغییرات قبلی رو بازیابی (recover) کنی یا نه.
.hello.c.swp
این فایل برای محافظت از تغییراتت ساخته میشه.
یعنی اگه موقع ویرایش برق بره، سیستم کرش کنه یا ویم ناگهانی بسته بشه، دفعهی بعد که فایل رو باز میکنی، ویم میگه:
Swap file ".hello.c.swp" already exists!
و ازت میپرسه که میخوای تغییرات قبلی رو بازیابی (recover) کنی یا نه.
معماریهای پروژههای فرانتاند:
۱- Monolithic
۲- Modular / Feature-Based
۳- Layered Architecture
۴- Micro Frontends
۵- Domain-Driven / Bounded Context
کوچک : Monolithic
متوسط : Modular / Layered
بزرگ سازمانی : Micro Frontends
یا Domain-Driven
۱- Monolithic
۲- Modular / Feature-Based
۳- Layered Architecture
۴- Micro Frontends
۵- Domain-Driven / Bounded Context
کوچک : Monolithic
متوسط : Modular / Layered
بزرگ سازمانی : Micro Frontends
یا Domain-Driven
هوش مصنوعی در نهایت یک ابزاره. مثل خودرو.
درست سفر با ماشین بسیار سریعتر از سفر پیادهاس ، ولی شما نمیتونی از جاده قم از تهران بری شمال.
اگر بدونی داری چیکار میکنی ، سرعتت رو خیلی میبره بالا ، اگر ندونی داری چیکار میکنی ، با همون سرعت به قهقرا میری.
درست سفر با ماشین بسیار سریعتر از سفر پیادهاس ، ولی شما نمیتونی از جاده قم از تهران بری شمال.
اگر بدونی داری چیکار میکنی ، سرعتت رو خیلی میبره بالا ، اگر ندونی داری چیکار میکنی ، با همون سرعت به قهقرا میری.
موقعی که آیفون ۶ اومد ، یه بندهخدایی کلیهاش رو فروخت آیفون بخره.
دوست دارم الان بدونم در چه حالیه.
این متن رو ۲ بار بخون ، چون من در مورد آیفون حرف نمیزنم.
دوست دارم الان بدونم در چه حالیه.
این متن رو ۲ بار بخون ، چون من در مورد آیفون حرف نمیزنم.
رقصنده با کد
https://www.youtube.com/watch?v=6uqgiFhW0Fs پیشنهاد میشه ببینید
اگر اینو ندیدید ، حتما ببینید
فرق OAuth 2.0 و OpenID Connect چیه؟
🔹 OAuth 2.0
یک استاندارد برای اجازه دسترسی (Authorization) هست.
با OAuth، یه برنامه میتونه به جای شما به یه سرویس دیگه دسترسی پیدا کنه، بدون اینکه رمزتون رو بگیره.
پس چطور اپها اسم کاربر رو نشون میدن؟
در واقع، اسم و اطلاعات کاربر رو از خود اون API میگیرن — نه از OAuth.
یعنی خود OAuth کار احراز هویت نمیکنه، فقط راه دسترسی رو باز میکنه.
ولی چون گوگل یه API داره که اطلاعات کاربر رو میده، اپ میتونه بفهمه اسم کیه.
مثلاً:
۱- اپ با OAuth وارد گوگل میشه.
۲- گوگل یه Access Token میده.
۳- اپ با اون توکن میره سراغ یه API دیگه (مثلاً https://www.googleapis.com/oauth2/v2/userinfo).
۴- اون API اطلاعات کاربر (اسم، ایمیل و…) رو برمیگردونه.
🔹 OpenID Connect (OIDC)
در واقع یه لایهی اضافه روی OAuth 2.0 هست که برای احراز هویت (Authentication) ساخته شده.
با OIDC، اپلیکیشن میتونه بفهمه شما کی هستی و از اطلاعات پروفایلتون (مثل نام یا ایمیل) مطمئن بشه.
همچنین OIDC یه ID Token هم به اپ میده که داخلش اطلاعات هویت کاربر هست و امضای دیجیتال داره،
این باعث میشه اپ مطمئن باشه که کاربر واقعاً همون کسیه که میگه.
--------------
مثال واقعی ورود با Google (OAuth 2.0 + OIDC)
۱- کاربر میخواهد با حساب گوگل خود وارد یک اپ وب شود.
۲- اپ (Client) کاربر را به Authorization Server گوگل هدایت میکند تا اجازه دسترسی بدهد.
در URL درخواست، اطلاعاتی مثل client_id، redirect_uri و scope=email profile openid فرستاده میشود.
۳- کاربر وارد حساب گوگل میشود و اجازه میدهد اپ به اطلاعات پروفایل او دسترسی پیدا کند.
۴- گوگل پس از تأیید، یک Authorization Code کوتاهمدت تولید میکند و به redirect_uri اپ بازمیگرداند.
۵- اپ Authorization Code را همراه با client_secret به گوگل میفرستد تا آن را با Access Token و ID Token تبادل کند.
۶- گوگل پس از بررسی، یک Access Token برای دسترسی به API و یک ID Token برای احراز هویت میدهد.
ID Token شامل اطلاعاتی مثل شناسه یکتا (sub)، نام و ایمیل کاربر است و امضای دیجیتال دارد.
۷- اپ با استفاده از Access Token، درخواست API به Resource Server گوگل میفرستد تا اطلاعات مورد نیاز کاربر را دریافت کند.
۸-در مرحله بعد Resource Server توکن را بررسی میکند و اگر معتبر باشد، دادههای کاربر (مثلاً ایمیل و نام) را برمیگرداند.
۹- اپ با استفاده از ID Token هم مطمئن میشود که کاربر واقعاً همان کسی است که ادعا میکند، بدون اینکه دوباره رمز را بخواهد.
۱۰- در نتیجه، کاربر با یک کلیک وارد اپ میشود و اپ هم هم دادهها و هم هویت او را به صورت امن دریافت میکند.
@alithecodeguy
🔹 OAuth 2.0
یک استاندارد برای اجازه دسترسی (Authorization) هست.
با OAuth، یه برنامه میتونه به جای شما به یه سرویس دیگه دسترسی پیدا کنه، بدون اینکه رمزتون رو بگیره.
پس چطور اپها اسم کاربر رو نشون میدن؟
در واقع، اسم و اطلاعات کاربر رو از خود اون API میگیرن — نه از OAuth.
یعنی خود OAuth کار احراز هویت نمیکنه، فقط راه دسترسی رو باز میکنه.
ولی چون گوگل یه API داره که اطلاعات کاربر رو میده، اپ میتونه بفهمه اسم کیه.
مثلاً:
۱- اپ با OAuth وارد گوگل میشه.
۲- گوگل یه Access Token میده.
۳- اپ با اون توکن میره سراغ یه API دیگه (مثلاً https://www.googleapis.com/oauth2/v2/userinfo).
۴- اون API اطلاعات کاربر (اسم، ایمیل و…) رو برمیگردونه.
🔹 OpenID Connect (OIDC)
در واقع یه لایهی اضافه روی OAuth 2.0 هست که برای احراز هویت (Authentication) ساخته شده.
با OIDC، اپلیکیشن میتونه بفهمه شما کی هستی و از اطلاعات پروفایلتون (مثل نام یا ایمیل) مطمئن بشه.
همچنین OIDC یه ID Token هم به اپ میده که داخلش اطلاعات هویت کاربر هست و امضای دیجیتال داره،
این باعث میشه اپ مطمئن باشه که کاربر واقعاً همون کسیه که میگه.
--------------
مثال واقعی ورود با Google (OAuth 2.0 + OIDC)
۱- کاربر میخواهد با حساب گوگل خود وارد یک اپ وب شود.
۲- اپ (Client) کاربر را به Authorization Server گوگل هدایت میکند تا اجازه دسترسی بدهد.
در URL درخواست، اطلاعاتی مثل client_id، redirect_uri و scope=email profile openid فرستاده میشود.
۳- کاربر وارد حساب گوگل میشود و اجازه میدهد اپ به اطلاعات پروفایل او دسترسی پیدا کند.
۴- گوگل پس از تأیید، یک Authorization Code کوتاهمدت تولید میکند و به redirect_uri اپ بازمیگرداند.
۵- اپ Authorization Code را همراه با client_secret به گوگل میفرستد تا آن را با Access Token و ID Token تبادل کند.
۶- گوگل پس از بررسی، یک Access Token برای دسترسی به API و یک ID Token برای احراز هویت میدهد.
ID Token شامل اطلاعاتی مثل شناسه یکتا (sub)، نام و ایمیل کاربر است و امضای دیجیتال دارد.
۷- اپ با استفاده از Access Token، درخواست API به Resource Server گوگل میفرستد تا اطلاعات مورد نیاز کاربر را دریافت کند.
۸-در مرحله بعد Resource Server توکن را بررسی میکند و اگر معتبر باشد، دادههای کاربر (مثلاً ایمیل و نام) را برمیگرداند.
۹- اپ با استفاده از ID Token هم مطمئن میشود که کاربر واقعاً همان کسی است که ادعا میکند، بدون اینکه دوباره رمز را بخواهد.
۱۰- در نتیجه، کاربر با یک کلیک وارد اپ میشود و اپ هم هم دادهها و هم هویت او را به صورت امن دریافت میکند.
@alithecodeguy
رقصنده با کد
فرق OAuth 2.0 و OpenID Connect چیه؟ 🔹 OAuth 2.0 یک استاندارد برای اجازه دسترسی (Authorization) هست. با OAuth، یه برنامه میتونه به جای شما به یه سرویس دیگه دسترسی پیدا کنه، بدون اینکه رمزتون رو بگیره. پس چطور اپها اسم کاربر رو نشون میدن؟ در واقع، اسم و…
مثال فنیتر:
وقتی در اپی میخواهید با استفاده از استاندارهای پست قبل و از طریق سروری مثل گوگل یا هر سرور شخصی یا غیر شخصی دیگری که این استاندارها رو پشتیبانی میکند ، لاگین کنید ، اتفاقی مشابه مراحل زیر اتفاق میفته:
۱- مسیر ارسال توکن به اپ
- کاربر به اپ مراجعه میکند و روی «Login with Google» کلیک میکند.
- اپ کاربر را به Authorization Server گوگل هدایت میکند (مثلاً یک URL شامل client_id و redirect_uri).
- مرورگر شما به گوگل میرود و کوکی گوگل به Authorization Server فرستاده میشود. گوگل متوجه میشود شما قبلاً لاگین کردهاید.
۲- صدور Authorization Code
- گوگل یک Authorization Code کوتاهمدت ایجاد میکند.
- سپس مرورگر شما را به redirect_uri اپ بازمیگرداند و این کد را در URL به اپ میدهد:
https://app.example.com/callback?code=AUTH_CODE
- یعنی اپ به طور مستقیم کوکی گوگل را نمیبیند، بلکه فقط این کد را از URL دریافت میکند.
۳- تبادل کد با توکن
- اپ این Authorization Code را همراه با client_id و client_secret خودش به سرور گوگل میفرستد (یک درخواست مستقیم از سرور اپ به گوگل).
- گوگل بررسی میکند و اگر کد معتبر باشد، Access Token و ID Token برای اپ صادر میکند.
۴- استفاده از توکن
اپ این توکنها را دریافت میکند و حالا میتواند:
- با Access Token از API گوگل دادهها را بخواند (مثلاً ایمیل و پروفایل).
- با ID Token هویت کاربر را تأیید کند.
سپس اپ یک نشست (Session) روی دامنه خودش ایجاد میکند و کاربر وارد اپ میشود.
@alithecodeguy
#login #oauth
وقتی در اپی میخواهید با استفاده از استاندارهای پست قبل و از طریق سروری مثل گوگل یا هر سرور شخصی یا غیر شخصی دیگری که این استاندارها رو پشتیبانی میکند ، لاگین کنید ، اتفاقی مشابه مراحل زیر اتفاق میفته:
۱- مسیر ارسال توکن به اپ
- کاربر به اپ مراجعه میکند و روی «Login with Google» کلیک میکند.
- اپ کاربر را به Authorization Server گوگل هدایت میکند (مثلاً یک URL شامل client_id و redirect_uri).
- مرورگر شما به گوگل میرود و کوکی گوگل به Authorization Server فرستاده میشود. گوگل متوجه میشود شما قبلاً لاگین کردهاید.
۲- صدور Authorization Code
- گوگل یک Authorization Code کوتاهمدت ایجاد میکند.
- سپس مرورگر شما را به redirect_uri اپ بازمیگرداند و این کد را در URL به اپ میدهد:
https://app.example.com/callback?code=AUTH_CODE
- یعنی اپ به طور مستقیم کوکی گوگل را نمیبیند، بلکه فقط این کد را از URL دریافت میکند.
۳- تبادل کد با توکن
- اپ این Authorization Code را همراه با client_id و client_secret خودش به سرور گوگل میفرستد (یک درخواست مستقیم از سرور اپ به گوگل).
- گوگل بررسی میکند و اگر کد معتبر باشد، Access Token و ID Token برای اپ صادر میکند.
۴- استفاده از توکن
اپ این توکنها را دریافت میکند و حالا میتواند:
- با Access Token از API گوگل دادهها را بخواند (مثلاً ایمیل و پروفایل).
- با ID Token هویت کاربر را تأیید کند.
سپس اپ یک نشست (Session) روی دامنه خودش ایجاد میکند و کاربر وارد اپ میشود.
@alithecodeguy
#login #oauth
گفته میشه لینوکس اپن سورسه. تا اینجاش اوکیه.
ولی هر چیز اپن سورسی امنه یا برای کاربر مشکلی ایجاد نمیکنه؟
اپن سورس بودن به خود خودی خوب نیست. اگر کسی بره کدها رو بخونه و مطمن بشه که همه چی اوکیه ، اون موقعاس که خوبه.
مثال بزنم. چند سال پیش یک باگی روی لینوکس شناخته شد که اگر موقع لاگین ۲۸ بار بکاسپیس میزدی لاگین میکرد. گویا خیلی هم کد واضحی داشته. خیلی وقت هم بوده.
اگر واقعا کسی رفته بود خونده بود این مشکل پیش میومد؟
حالا فرضا کسی رفت و همه کد رو خوند. آیا تمام کتابخانههاش رو میره بخونه؟ ایا کتابخانه کتابخانههاش رو هم میره بخونه؟ اومدیم و همه چی اوکی بود. با بکدور روی سیپییو اینتل چیکار میشه کرد؟
خلاصه که امنیت و اپن سورس بودن شوخیای بیش نیست. شل کنید لذت ببرید
ولی هر چیز اپن سورسی امنه یا برای کاربر مشکلی ایجاد نمیکنه؟
اپن سورس بودن به خود خودی خوب نیست. اگر کسی بره کدها رو بخونه و مطمن بشه که همه چی اوکیه ، اون موقعاس که خوبه.
مثال بزنم. چند سال پیش یک باگی روی لینوکس شناخته شد که اگر موقع لاگین ۲۸ بار بکاسپیس میزدی لاگین میکرد. گویا خیلی هم کد واضحی داشته. خیلی وقت هم بوده.
اگر واقعا کسی رفته بود خونده بود این مشکل پیش میومد؟
حالا فرضا کسی رفت و همه کد رو خوند. آیا تمام کتابخانههاش رو میره بخونه؟ ایا کتابخانه کتابخانههاش رو هم میره بخونه؟ اومدیم و همه چی اوکی بود. با بکدور روی سیپییو اینتل چیکار میشه کرد؟
خلاصه که امنیت و اپن سورس بودن شوخیای بیش نیست. شل کنید لذت ببرید