چگونه با Supabase Auth احراز هویت را در برنامه های خود تنظیم کنید
در این مقاله، مفاهیم کلیدی اساسی را می آموزید که به شما کمک می کند تا نحوه عملکرد احراز هویت و مجوز را درک کنید.
شما با یادگیری اینکه احراز هویت و مجوز چیست شروع می کنید و سپس یاد می گیرید که چگونه با استفاده از احراز هویت Supabase احراز هویت را در برنامه های خود پیاده سازی کنید.
فهرست مطالب
مدیریت جلسات با توکن ها، اسرار و کوکی ها
OAuth 2.0 و احراز هویت اجتماعی
خدمات احراز هویت Supabase و Supabase
نحوه استفاده از Supabase Auth
پیش نیازها
برای استفاده بیشتر از این مقاله به موارد زیر نیاز دارید:
دانش اولیه برنامه نویسی
پروژه Supabase که باید دنبال شود.
و یک ویرایشگر متن برای امتحان کردن نمونه کد.
احراز هویت و مجوز چیست؟
به زبان ساده، احراز هویت فرآیندی است که کاربر خود را در یک سیستم شناسایی می کند و سیستم تأیید می کند که کاربر همان چیزی است که ادعا می کند.
از سوی دیگر، مجوز فرآیند سیستمی است که تعیین می کند کاربر مجاز به مشاهده یا تعامل با کدام بخش از برنامه است و کاربر مجاز به دسترسی به کدام بخش نیست.
احراز هویت چگونه کار می کند؟
اولین باری که کاربر با یک سیستم تعامل برقرار می کند، از آنها درخواست می شود که ثبت نام کنند. به طور معمول، کاربر اطلاعات و یک راز را ارائه می دهد که قرار است فقط توسط آنها و سیستم شناخته شود. این بخش ثبت نام از فرآیند احراز هویت است.
دفعه بعد که کاربر با همان سیستم تعامل برقرار می کند، برای تایید هویت خود، ملزم به ارائه اطلاعات شناسایی به همراه راز تعریف شده قبلی خواهد بود.
دستگاهی که کاربر تعامل را از آن آغاز می کند کلاینت و سیستم سرور است. هنگامی که سیستم کاربر را تأیید می کند، برخی از اطلاعات مربوط به کاربر را برای مشتری ارسال می کند.
از آنجایی که این فرآیند زمان بر است و نیاز به اقداماتی از جانب کاربر دارد، مشتری این اطلاعات را ذخیره می کند و هر زمان که کاربر نیاز به دسترسی به سیستم داشته باشد، آن را به سیستم ارسال می کند. این امر با عدم نیاز به کاربر برای احراز هویت مجدد فعال در هر بار اصطکاک را کاهش می دهد. این یک جلسه کاربر ایجاد می کند.
مدیریت جلسات با توکن ها، اسرار و کوکی ها
سرور می تواند اطلاعات کاربر را به دو طریق به مشتری منتقل کند - از طریق نشانه ها یا شناسه های جلسه.
در مورد توکن ها، سرور یک توکن امضا شده تولید می کند و آن را به مشتری ارسال می کند. این نشانه معمولاً JWT است و ممکن است حاوی اطلاعاتی در مورد کاربر باشد. کلاینت این توکن را ذخیره می کند و هر بار که کاربر درخواستی ارائه می دهد، آن را به سرور ارسال می کند.
سرور قادر است یکپارچگی توکن را تأیید کند زیرا آن را امضا کرده است. این به عنوان احراز هویت بدون حالت نامیده می شود زیرا توکن خود حاوی است و سرور نیازی به ذخیره داده های جلسه در یک پایگاه داده یا حافظه پنهان ندارد.
در مورد کوکی ها، سرور یک رکورد از جلسه کاربر در یک پایگاه داده یا یک کش ایجاد می کند که شامل شناسه جلسه است. سرور این شناسه جلسه را برای مشتری ارسال می کند.
کلاینت این Session ID را در یک کوکی ذخیره میکند و هر زمان که کاربر درخواستی ارائه کرد، آن را به سرور بازمیگرداند. شناسه جلسه یک رشته تصادفی است که به عنوان نشانگر رکورد واقعی کاربر در پایگاه داده عمل می کند.
هنگامی که سرور این کوکی را دریافت می کند، شناسه جلسه موجود را با سوابق جلسه خود مطابقت می دهد و سپس آن رکورد را با داده های کاربر در پایگاه داده مطابقت می دهد. این به عنوان احراز هویت وضعیتی نامیده می شود زیرا به جستجوی پایگاه داده نیاز است.
انواع فاکتورهای احراز هویت
فاکتور احراز هویت به نوعی از اعتبار اشاره دارد که می تواند برای تأیید هویت کاربر استفاده شود. معمولاً 3 عامل در فرآیند احراز هویت استفاده می شود که عبارتند از:
چیزی که می دانید: یک مثال یک رمز عبور است.
چیزی که دارید: یک مثال رمزی است که به تلفن شما ارسال می شود.
استراتژی های رایج احراز هویت
استراتژی های احراز هویت به فرآیندهای مورد استفاده برای تأیید یک کاربر اشاره دارد. انواع مختلف استراتژی های احراز هویت عبارتند از:
احراز هویت مبتنی بر رمز عبور
این به روش سنتی شناسایی کاربران از طریق ارائه یک راز مبتنی بر متن که توسط کاربر تعریف شده است، اشاره دارد. به طور معمول، سیستم کل فرآیند را در سرورهای خود انجام می دهد و مسئولیت امنیت و قابلیت اطمینان را بر عهده دارد.
احراز هویت بدون رمز عبور
در این روش، سیستم بدون نیاز به رمزهای عبور تعریف شده توسط کاربر، هویت کاربر را تأیید می کند. در عوض، سیستم یک رمز عبور یک بار مصرف (OTP) ایجاد کرده و برای کاربر ارسال می کند. این OTP سپس به جای رمز عبور برای دسترسی به سیستم استفاده می شود. به عنوان مثال می توان به پیوندهای جادویی اشاره کرد که در آن سیستم کدی را به ایمیل کاربر ارسال می کند.
احراز هویت دو مرحله ای (2FA)
این سیستم تلاش میکند تا تأیید کند که کاربر چه کسی است که ادعا میکند با درخواست یک قطعه اطلاعات اضافی پس از تحلیل احراز هویت اولیه.
این میتواند یک OTP باشد که از طریق ایمیل یا پیامک برای کاربر ارسال میشود، یا میتواند با درخواست اطلاعات بیومتریک کاربران قبل از اعطای دسترسی به سیستم باشد.
احراز هویت چند عاملی (MFA)
این شبیه به 2FA است، با این تفاوت که سیستم از بیش از یک روش اضافی برای تأیید هویت کاربر استفاده می کند. روش ها یا عوامل اضافی مورد استفاده در هر دو MFA و 2FA معمولاً خارج از سیستم هستند، مانند پیامک که نیاز به تلفن دارد.
OAuth 2.0 و احراز هویت اجتماعی
OAuth یک چارچوب مجوز است که به مشتریان اجازه می دهد از طرف کاربر به اطلاعات یک سرور خارجی دسترسی داشته باشند. سرور خارجی به کاربر اجازه می دهد تا منابع درخواستی را با مشتری به اشتراک بگذارد.
پس از اینکه کاربر این عمل را مجاز کرد، سرور خارجی یک رمز دسترسی برای مشتری صادر می کند.
سپس مشتری این رمز دسترسی را به سرور اصلی می دهد، که اعتبار توکن را تأیید می کند و دسترسی به منابع درخواستی را مدیریت می کند. OAuth 2.0 آخرین نسخه OAuth است و فریمورک پرکاربردتر است.
OAuth 2.0 پشتیبانی از سیستم های غیر مبتنی بر مرورگر را گسترش می دهد. احراز هویت اجتماعی مبتنی بر OAuth 2.0 است، اما در این مورد، سرور خارجی که مشتری کاربر را به آن هدایت می کند، معمولاً یک پلت فرم رسانه اجتماعی است. هر زمان که دکمه «ادامه با Twitter/X» را در صفحه احراز هویت میبینید، این نوع فرآیند احراز هویت است.
SSO و SAML
SAML مخفف عبارت Security Assertion Markup Language است. این یک استاندارد برای انتقال اطلاعات احراز هویت و مجوز بین سیستم ها است. یک سیستم به عنوان سیستم درخواست کننده یا ارائه دهنده خدمات (SP) و سیستم دیگر اطلاعات درخواستی را نگه می دارد یا به عنوان ارائه دهنده هویت (IdP) عمل می کند.
با دریافت این درخواست، ارائهدهنده هویت عباراتی را در فرم SAML ایجاد میکند که حاوی برخی اطلاعات کاربر است. سپس ارائهدهنده خدمات از این اطلاعات برای تصمیم گیری در مورد نحوه مدیریت کاربر در رابطه با منابع محافظت شده خود استفاده میکند.
SSO به Single Sign On اشاره دارد. این یک استراتژی احراز هویت است که به کاربران اجازه میدهد از طریق یک سیستم/برنامه وارد سیستم شوند و سپس به چندین برنامه در یک شبکه دسترسی داشته باشند.
این امر با عدم الزام کاربر به ورود به برنامه های مختلف مرتبط، تجربه کاربر را بهبود می بخشد. نمونهای از آن فضای کاری گوگل است. اگر قبلاً به حساب Gmail خود وارد شده اید، نیازی به ورود جداگانه به Docs ندارید. SSO توسط SAML تسهیل می شود زیرا SAML مکانیزم احراز هویت استاندارد را فراهم می کند و به سیستم های مختلف اجازه می دهد به یکدیگر اعتماد کنند.
احراز هویت و امنیت
احراز هویت شامل مدیریت، جابجایی و ذخیره اطلاعات حساس کاربر در رابطه با منابع سرور محافظت شده است. این امر باعث می شود که امنیت و بهترین شیوه ها جنبه مهمی از یک سیستم احراز هویت باشد.
برخی از مراحل اساسی وجود دارد که می توانید برای افزایش بسیار زیاد امنیت سیستم های احراز هویت خود انجام دهید. این شامل:
اجرای رمزهای عبور قوی تر
نیاز به کاربر برای ثبت یک عامل اضافی برای فعال کردن 2FA.
رمزگذاری داده های حساس هنگام انتقال از طریق HTTPS.
ذخیره رمزهای عبور به صورت رمزگذاری شده
استفاده از چارچوب های احراز هویت استاندارد مانند OAuth 2.0.
انطباق های خاصی وجود دارد که سیستم شما باید هنگام مدیریت داده های حساس کاربر فراتر از اطلاعات احراز هویت خاص در نظر بگیرد. اگر در برخی کشورها فعالیت می کنید یا برنامه های سازمانی را مدیریت می کنید، این امر حتی بیشتر می شود. این انطباق ها عبارتند از:
GDPR : این انطباق استانداردهایی را در مورد مدیریت داده ها از جمله محرمانه بودن و یکپارچگی اعمال می کند.
HIPAA : این انطباق برای داده های پزشکی اعمال می شود. سطح بالایی از صداقت را انتظار دارد.
SOC : این چارچوبی است که عموماً برای فناوری های ابری مورد نیاز است. این بر اساس موسسه آمریکایی CPA است و جنبه های حریم خصوصی، امنیت، در دسترس بودن، یکپارچگی و محرمانه را پوشش می دهد.
با در نظر گرفتن همه این موارد، متوجه خواهید شد که استفاده از سرویسهای احراز هویت اختصاصی برای برنامههای کاربردیتان بهجای انتشار اعتبار خود، اغلب آسانتر است.
گزینه های زیادی برای این کار وجود دارد، از جمله سرویس های احراز هویت اختصاصی مانند Clerk و Auth0 و Backend-as-a-Service مانند Supabase و Firebase. در این مورد، بیایید نگاهی به پیشنهاد احراز هویت Supabase بیندازیم.
خدمات احراز هویت Supabase و Supabase
Supabase یک پلتفرم Backend به عنوان سرویس (BaaS) منبع باز است که توسعه یک Backend را برای برنامه های شما بسیار آسان و سریع می کند. این مبتنی بر فناوری های منبع باز است و فعالانه از اکوسیستم منبع باز پشتیبانی می کند.
Supabase خدمات رایجی را ارائه می دهد که اکثر برنامه های کاربردی به آن نیاز دارند. این خدمات عبارتند از:
پایگاه داده: این یک پایگاه داده کاملاً برجسته Postgres است.
احراز هویت: این یک سرویس احراز هویت آماده سازمانی است که مبتنی بر فورک سرور goTrue است.
Realtime: این یک API است که توانایی استفاده از قابلیت های بلادرنگ را در برنامه های شما اضافه می کند.
ذخیره سازی: این یک سرویس ذخیره سازی است که یک بسته بندی s3 است.
توابع لبه: اینها توابع بدون سرور هستند که روی لبه اجرا می شوند. طراحی شده توسط Deno Runtime.
Vector: این یک پایگاه داده برداری است که کار با جاسازیها را در برنامههای هوش مصنوعی آسانتر میکند.
Supabase سازگار با SOC2، HIPAA و GDPR، خود میزبان و منبع باز است. علاوه بر این، سرویس احراز هویت آنها استراتژیهای بسیاری را در معرض دید شما قرار میدهد و به شما کنترل کامل بر روی دادههایتان میدهد و میتواند مستقل از سایر پیشنهادات آنها استفاده شود. این و API مستندسازی خودکار آنها، آن را به انتخاب بسیار خوبی برای برنامه های شما تبدیل می کند.
نحوه استفاده از Supabase Auth
اولین قدم این است که تنظیمات احراز هویت پروژه Supabase خود را تنظیم کنید. میتوانید روشهای احراز هویت دقیقی را که میخواهید استفاده کنید از طریق تنظیمات فعال کنید. سه راه برای شروع استفاده از Supabase auth در پروژه وجود دارد:
API
شما می توانید با فراخوانی نقطه پایانی احراز هویت و ارسال اطلاعات کاربر به آن، مستقیماً از سرویس احراز هویت در برنامه های خود استفاده کنید. همچنین می توانید کاربران خود را دریافت، به روز رسانی و حذف کنید.
وقتی پروژه ای را از طریق کنسول Supabase ایجاد می کنید، API به طور خودکار در دسترس است و می توان آن را به این صورت نامید:
//This will return an object containing an access token, the newly created user data and other metadata const res = await fetch("https://<your-project-ref>/auth/v1/signup", { method: "POST", headers: { authorization: "Bearer YOUR_SUPABASE_KEY", "content-type": "application/json", }, body: JSON.stringify({ email: "user-email", password: "user-password", }), });
SDK ها
Supabase چند SDK (کیت های توسعه نرم افزار) را به زبان های برنامه نویسی مختلف ارائه می دهد تا تعامل با پروژه Supabase شما را ساده کند. زبانهایی که به طور رسمی پشتیبانی میشوند عبارتند از Dart و JavaScript، با پایتون و سایر زبانها از پشتیبانی قوی جامعه برخوردار هستند.
روش شروع کار شامل گفت ن SDK به عنوان یک وابستگی و سپس اتصال برنامه خود به پروژه Supabase است.
در مورد JavaScript SDK، این چیزی شبیه به این است:
//Install via npm: npm install @supabase/supabase-js // or add cdn links: <script src="https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2"></script>
//Then initialize Supabaseimport { createClient } from '@supabase/supabase-js' const supabaseUrl = 'https://<your-project-ref>.supabase.co' const supabaseKey = process.env.SUPABASE_ANON_KEY const supabase = createClient(supabaseUrl, supabaseKey)
سپس می توانید به روش های احراز هویت در زیر فضای نام auth دسترسی داشته باشید:
const { data, error } = await supabase.auth.signUp({ email: 'user email', password: 'user password', })
Auth UI Helpers
Supabase کتابخانه های کمکی را فراهم می کند تا احراز هویت با استفاده از سرویس خود را آسان تر کند. این کتابخانه ها صفحه های ورود قابل تنظیمی را ارائه می کنند که از پیوندهای جادویی، استراتژی های ورود مبتنی بر رمز عبور و اجتماعی پشتیبانی می کنند.
در حال حاضر، کتابخانه ها برای جاوا اسکریپت و فلاتر در دسترس هستند. Supabase همچنین یک بسته SSR (Server Side Rendering) جداگانه برای برنامه هایی که از فریمورک های سمت سرور استفاده می کنند و برای در دسترس بودن توکن دسترسی Supabase نیاز دارند، ارائه می دهد.
برای شروع استفاده از React Auth UI، به عنوان مثال، ابتدا باید وابستگی ها را مطابق شکل زیر نصب کنید:
npm install @supabase/supabase-js @supabase/auth-ui-react @supabase/auth-ui-shared
سپس می توانید پس از مقداردهی اولیه Supabase مانند مثال SDK بالا، استفاده از کتابخانه را شروع کنید. در اینجا چند کد نمونه وجود دارد که نحوه استفاده از کتابخانه UI auth را در برنامه React نشان می دهد:
import { useEffect } from "react"; import { useNavigate } from "react-router-dom"; import { Auth } from "@supabase/auth-ui-react"; import { ThemeSupa } from "@supabase/auth-ui-shared"; import { supa } from "../constants"; const AuthUi = () => { const navigate = useNavigate(); useEffect(() => { const { data: { subscription }, } = supa.auth.onAuthStateChange((event) => { if (event === "SIGNED_IN") { navigate("/authenticated"); } }); return () => subscription.unsubscribe(); }, [navigate]); return ( <Auth supabaseClient={supa} providers={["google", "github", "apple", "discord"]} // controls whether to display only social providers // onlyThirdPartyProviders redirectTo="http://localhost:3000/authenticated" // comes with preconfigured themes, can add custom themes appearance={{ theme: ThemeSupa }} // controls how to display the social provider icons socialLayout="horizontal" /> ); }; export default AuthUi;
این فرم زیر را روی صفحه نمایش می دهد:
خلاصه
احراز هویت فرآیندی است که کاربر خود را شناسایی میکند و سرور این هویت را تأیید میکند، در حالی که مجوز سیستمی است که تعیین میکند کاربر باید چه دسترسی به منابع داشته باشد و کاربر را بر این اساس محدود میکند.
بعد از اینکه سرور کاربر را احراز هویت کرد، اطلاعات کاربر را در قالب یک رمز یا شناسه جلسه در یک کوکی ارسال می کند.
هر زمان که کاربر به دسترسی خاصی نیاز داشته باشد، اطلاعات بین مشتری و سرور ارسال می شود تا زمانی که منقضی شود یا کاربر با خروج یا حذف حساب خود چرخه را خاتمه دهد.
این فرآیند تأیید کاربر با استفاده از عوامل خاصی از احراز هویت رخ می دهد. به عنوان مثال، یک سیستم ممکن است فقط به رمز عبور نیاز داشته باشد در حالی که سیستم دیگر نیاز به رمز عبور و کد ارسال شده به شماره تلفن کاربران دارد.
سیستم احراز هویت شما می تواند با استفاده از هر یک از سه عامل احراز هویت، چندین استراتژی احراز هویت را مجاز کند.
اگر تصمیم به عدم رسیدگی به احراز هویت خود دارید، Supabase یک گزینه عالی است.
Supabase auth از طریق API، SDK ها و کتابخانه های Auth قابل دسترسی است. Supabase یک بسته SSR برای فریمورک های سمت سرور نگهداری می کند.
منابع
منابع زیر برای مطالعه بیشتر مفید است. آنها توضیحات بیشتری در مورد احراز هویت و مجوز، و همچنین اسناد خاص Supabase ارائه می دهند.
صفحه اسناد رابط کاربری تأیید اعتبار
ارسال نظر