oauth2 – Auth0 در مقابل Firebase = oidc vs Firebase Tokens

من سعی می کنم بین Auth0 و Firebase به عنوان ارائه هویت من انتخاب کنم. من یک SPA با یک API Backend ایجاد می کنم و می خواهم از Auth0 یا Firebase برای تمام منطق مربوط به کاربران / رمزهای عبور / حقوق دسترسی و غیره استفاده کنم.

Auth0 از OIDC استفاده می کند، که استاندارد است، اما IMHO بیش از حد مهندسی شده و پیچیده است . این نشانه های جداگانه ای برای هویت (Token ID) و برای دسترسی به منابع با پسوند (نشانه دسترسی) است، در حالی که firebase از یک نشانه واحد استفاده می کند (اگر به درستی درک درستی داشته باشم). بنابراین سوال من در اینجا این است که چگونه مکانیزم احراز هویت استفاده از Firebase است و چرا یک در این مورد کافی نیست

آیا در این تنظیم نیاز به حفاظت از CSRF با یک API REST با پشتیبانی oauth2 و یک سرور معتبر SSO Auth SSO دارم؟

من دیدم پاسخ آیا CSRF امکان پذیر است اگر من حتی از کوکی ها استفاده نمی کنم؟ اما 2 پاسخ متقابل وجود دارد و خود سوال این اطلاعات را نیز ارائه نمی دهد.

من یک API REST ایجاد می کنم که توسط یک سرویس دهنده وب (از ایجاد خود ما) در حال اجرا در دامنه دیگری استفاده می شود، بنابراین ما درخواست CORS را انجام دهید این API به عنوان یک سرور منبع oauth2 اجرا می شود، بنابراین دسترسی توسط توالی هایی که در هدر احراز هویت منتقل می شوند محدود شده است. ما هیچ کوکی وجود ندارد، همه چیز بی ثمر است. من از مقاله در https://spring.io/blog/2011/11/30/cross-site-request-forgery-and-oauth2

  • دنبال میکنم. ما از SSL استفاده خواهیم کرد
  • ثبت نام تغییر مسیر uri
  • تنها نوع اعطاء ما، کد مجوز است، بدون نیاز به یک مخفی مشتری (به عنوان منبع مشتری وب عمومی) به جای نوع کمک ضمنی، به عنوان در مورد توصیه های در https://oauth.net/2/ grant-types / implicit /
  • مشتری با یک سرصفحه تایید می کند زمانی که سرور سرور واقعی آن را فراخوانی می کند
  • دریافت پروانه دسترسی توسط گذراندن کد مجوز 1 بار در پارامترهای فرم صورت می گیرد ( x-www- Form-urlencoded )، که به نظر می رسد راه طبیعی است، نباید در تاریخ مرورگر به عنوان پارامتر query باشد.
  • مشتری همچنین از برخی از پارامترهای حالت مخفی هنگام استفاده از کد مجوز استفاده می کند. در این مورد من مطمئن نیستم که یک نقطه وجود دارد زیرا مشتری به یک رمز محرمانه برای دسترسی به یک نشانه دسترسی دسترسی پیدا نمی کند.
  • برای نقطه پایانی oauth / token که در واقع شما یک token دسترسی دریافت می کنید، تنها مجاز هسته دامنه مشتری وب ما است
  • برای نقطه پایانی oauth / authorize CORS مجاز نیست. شاید این بیش از حد باشد زیرا تغییر مسیر یوری فقط به حوزه ی خود ما اشاره می کند؟

من فکر می کنم که تقریبا همه چیز را در آن قسمت پوشش می دهد.

اکنون یک بردار حمله دیگر وجود دارد که در قالب سرور تأیید هویت oauth2 وجود دارد خود، که قرار است SSO باشد و جلسات داشته باشد و با مجوز اولیه در دسترس است. با این حال، به نظر نمی رسد هیچ اقدامی را که می توانید با یک حمله csrf انجام دهید که در واقع مفید خواهد بود. شما می توانید درخواست خود را به این نقطه های oauth انجام دهید، اما شما باید قادر به خواندن نتیجه، که توسط پیکربندی CORS جلوگیری می کند و این واقعیت است که تغییر مسیر uri از قبل ثبت شده است. هیچ POST شما وجود ندارد که بتوانید رمز عبور خود را عوض کنید، آدرس ایمیل خود را بازنشانی کنید، و غیره، همه چیز در واقع به عنوان یک سرور منبع نیز در معرض قرار دارد.

آیا چیزی از دست رفته؟ چگونه می توان در مورد جستجوی آسیب پذیری ها در اینجا جستجو کرد؟

oauth2 – نحوه مدیریت مجوزها در سرور منابع (RS) هنگام اعطای احراز هویت از طریق OIDC (Auth0)؟

من در آستانه ایجاد یک سرویس در سرور منبع خود هستم که علامت دسترسی خارجی ایجاد شده را برای یک نشانه دسترسی داخلی ایجاد می کند. با این حال، این اشتباه است من شواهدی از کسی که نیاز به این الگوی را پیدا نکرده است، نشانه خوبی است که چیزی را از دست داده ام.

جزئیات

ما یک SOA مبتنی بر REST معمولی را اجرا می کنیم. ما تأیید اعتبار را به Auth0 منتقل می کنیم تا بتوانیم از مشتریان با ارائه دهندگان هویت متفاوت پشتیبانی کنیم. به عنوان مثال، درخواستهای API را دریافت می کنیم و براساس نشانه دسترسی تولید شده توسط Auth0 انجام می دهیم. با این حال، ما می خواهیم مجوز API های دقیق را در داخل مدیریت کنیم و ما می خواهیم کنترل بیشتری بر چرخه عمر نشانه (مثلا، لغو سمت سرور مجاز).

Auth0 از ادعاهای سفارشی پشتیبانی می کند، اما این نیاز به اتصال بسیار نزدیک بین سرور ما و (و یا قوانین ما در سرور خود.) همچنین، این نیز نیاز مجبور به لغو مجوز را حل نمی کند.

این به نظر می رسد این نیاز را می توان با مبادله رمز دسترسی دسترسی Auth0 برای یک جدید نشانه دسترسی تولید شده توسط سرور ما، که می تواند ادعاهای مربوط به مجوز های پیکربندی کاربر / هویت را تزریق کند. این اجازه می دهد تا ما کنترل کنیم، به خوبی چیزی که ما در مورد نشانه می خواهیم، ​​از جمله لغو آن است.

نگرانی ها

من تمیز کردن مشخصات OIDC و OAuth2 و جستجو برای دیگران با نیاز مشابه. عدم وجود هر گونه بازدیدها به من مربوط می شود.

آیا راه بهتر برای مدیریت مجوز داخلی وجود دارد، در حالیکه هنوز تأیید هویت را به یک ارائه دهنده مانند Auth0 منتقل می کند؟

آیا راهی بهتر برای لغو املایی وجود دارد تا تولید و ردیابی نشانه ها ؟ آیا امکان حفظ نشانه های بدون حقوق و حمایت از لغو در همان زمان وجود دارد؟ (اگر این برای یک پست SE خیلی زیاد است، این بخش را نادیده بگیرید.)

چرا سرور auth_code بیش از URI هدایتگر است تا در یک صفحه وب در OAuth 2.0؟

در هر استاندارد OAuth سه پایه، auth_code به عنوان پارامتر URL عمل می کند، در حالی که URL redirect_uri در هنگام ثبت نام مشتری مشخص شده است. من حدس می زنم این یک پاسخ HTTP 302 است که توسط سرور OAuth فرستاده می شود که مرورگر را مرور می کند. من تعجب می کنم که چرا auth_code در بدن یک وب سایت تولید شده توسط سرور OAuth خدمت نمی کند؛ بنابراین HTTP 200 پاسخ به طور منظم ارسال می شود. آیا به جای ارائه خدمت در داخل صفحه وب، یک پیغام امنیتی مرتبط با خدمت auth_code بیش از redirect_uri مرتبط است؟

گوگل – خطر اشتراک گذاری client_secret.json در بازپرداخت عمومی چیست؟

من یک اسکریپت پایتون دارم که داده ها را به یک فایل google google public file می نویسد و برای استفاده از صفحات گوگل API باید یک کاربر مجوز اسکریپت من را داشته باشد. من می خواهم این اسکریپت را با دیگران به اشتراک بگذارم و بنابراین من نیز در نظر دارم که client_secret.json را نیز به اشتراک بگذارم، اما من در درک خطرات امنیتی درگیر هستم.

تا آنجا که من OAuth2 را درک می کنم، با ارائه client_secret .json اسکریپت من خود را تأیید می کند و پس از آن یک کاربر مجوز اسکریپت برای نوشتن داده ها را از طرف کاربر درست می کند؟

بنابراین، درست است که بدترین چیزی که می تواند اتفاق بیفتد که client_secret.json را به اشتراک می گذارد این است که کسی از سرویس من استفاده می کند برای نوشتن داده ها به ورق ها (فقط خود یا به صورت عمومی) با استفاده از سهم اسکریپت من