jwt – چگونه مجوز پس از احراز هویت با استفاده از شناسه open شناسایی می شود

فرض کنید که یک مشتری یک شناسه شناسایی می کند و از یک سرور Auth به عنوان یک نتیجه از تأیید صحت موفق استفاده می کند. مشتری اکنون درخواستی را به سرور برنامه می فرستد. (درخواست شامل برچسب دسترسی و شناسه) است. به نظر من، سرور برنامه در حال حاضر برای تماس با سرور auth برای تأیید این نشانه ها. اگر پرونده ها معتبر باشند، سرور برنامه با درخواست ادامه می یابد. در غیر این صورت، درخواست را رد می کند. آیا این درست است؟

مسئله اصلی من با این تنظیم نیاز به تماس با سرور auth برای هر درخواست است. آیا روش استاندارد برای جلوگیری از این وجود دارد؟ نحوه استفاده از یک کلید مخفی (شناخته شده به هر دو سرور Auth و سرور برنامه) برای تأیید امضا – شبیه به JWT. در این مورد تفاوت بین openID اتصال + OAuth2 و JWT چیست؟

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

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

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

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

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

جزئیات

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

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

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

نگرانی ها

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

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

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

jwt – برنامه ی وب یک درخواست برای یک API REST زمانی که در حال تأیید صحت است

من تازه به ASP.NET هسته و OpenID اتصال / AzureAD، بنابراین من به دنبال برخی از اعتبار سنجی (و یا در غیر اینصورت) از رویکرد من است. خواندن / گوگلینگ گسترده در طول چند هفته گذشته در حالی که من در حال یادگیری این است که پاسخ دقیق نگرفته است (اگر چه بسیاری از تقریبا نادرست است)

من یک برنامه وب مبتنی بر مرورگر است که باید با آن امن AzureAD، به طوری که انتظار می رود، از این استفاده می کند. همه کارها خوب است.

همچنین یک API را در همان نرم افزار قرار می دهم. من نمیخواهم به علت نگرانی CSRF از کوکی استفاده کنم و نیاز به API برای سرویس دهی یک برنامه تلفن همراه در تاریخ بعدی است. من API را برای استفاده از JWT Bearer مبتنی بر auth پیکربندی کردم. همچنین به خوبی کار میکند (به عنوان مثال از پستمن درخواست میکند)

یکی از صفحات در برنامه وب نیاز به برقراری تماس AJAX به API دارد، و من نمیخواهم / باید برنامه را به یک SPA تبدیل کنم. بنابراین رویکردی که در حال حاضر در حال تلاش هستم این است:

وقتی وارد برنامه میشوم، حافظه (از طرف سرور) را از AzureAD دریافت میکنم. وقتی صفحه با تماس AJAX بازدید می شود، من "id_token" را به یک فیلد پنهان می نویسم و ​​هنگامی که نیاز به برقراری تماس AJAX دارم، خواندن id_token در جاوا اسکریپت و اضافه کردن آن به عنوان "مجوز" هدر.

این همه به عنوان یک رویا کار می کند، بنابراین من آن را نگران کرده ام و آن را نگران کرده ام. من نمی توانم مسائل CSRF را ببینم، چون تماس AJAX دیگر کوکی نیست. اگر چه من یک id_token را به صفحه می نویسم، کاربر باید کوکی ها را برای دیدن این صفحه در اولویت قرار دهد.

آیا چیزی است که من از آن چشم پوشی می کنم؟

احراز هویت – ID شناسایی اتصال: دوم ID-Token تنها دارای ویژگی "sub" است

من راه حل client-IAM را با استفاده از WSO2 Identity Server 4.5.1 راه اندازی می کنم. یکی از (چند) برنامه های کاربردی که با من از طریق Open ID ارتباط برقرار می کنند، یک رفتار غیرمنتظره را کشف کرده اند، و اگر برای رفتار Open Id Connect مناسب است یا اگر محصول اشتباه رفتار می کند، نیاز به کمک دارد.

هنگامی که کاربر تأیید هویت می کند، شناسه شناسایی و مجوز-کد بازگردانده می شود. ID_Token شامل تمام ویژگی های کاربر و نقش های قابل اجرا است، و بنابراین نقطه پایانی Userinfo اگر درخواست پس از رونویسی کد رد و بدل شود. یک دوره زمانی که برنامه میخواهد جلسه خود را تازه کند و کاربر را به OP بازگرداند تا یک شناسه جدید شناسایی کند. این کار می کند، اما به دلایلی، ID-Token (و نقطه پایانی Userinfo) فقط "زیر" را در این رویکرد دوم به نمایش می گذارد.

Q: آیا این کار چگونه OIDC قرار است کار کند؟

از شما متشکرم .

PS.
رفتار عجیب دیگر که متوجه شدم (ممکن است به نوعی مرتبط با آن باشد) این است که access_tokens که در طول مبادله کد ایجاد شده برای این برنامه طول عمر 300.000 ثانیه را دارد. بیش از آنچه که من تنظیم کرده ام (هر جا!). هنگامی که access_tokens از طریق کمک ضمنی ارائه می شود اتفاق نمی افتد. من نمیتوانم دلیل دلیلی برای این اتفاق بیافتم، اما اگر وجود داشته باشد، خوشحال خواهم شد که آن را بشنوم.
DS