Metabase

احراز هویت مبتنی بر JWT

می‌توانید متابیس را به ارائه‌دهنده هویت خود با استفاده از JSON Web Tokens (JWT) برای احراز هویت افراد متصل کنید.

جریان معمولی برای یک تعامل SSO مبتنی بر JWT با متابیس

فرض کنید سایت شما localhost است که روی پورت 3000 سرو می‌دهد:

  1. شخص سعی می‌کند یک سؤال را مشاهده کند، مثلاً http://localhost:3000/question/1-superb-question.
  2. اگر شخص وارد نشده باشد، متابیس آن‌ها را به http://localhost:3000/auth/sso redirect می‌کند.
  3. با حفظ URI اصلی /question/1-superb-question، متابیس شخص را به ارائه‌دهنده SSO (اپلیکیشن احراز هویت) redirect می‌کند.
  4. شخص با استفاده از فرم پایه وارد می‌شود.
  5. در صورت ورود موفق، اپلیکیشن احراز هویت شما باید یک درخواست GET به endpoint متابیس شما با token و URI "return to" ارسال کند: http://localhost:3000/auth/sso?jwt=TOKEN_GOES_HERE&return_to=/question/1-superb-question.
  6. متابیس JSON Web Token را تأیید می‌کند، شخص را وارد می‌کند، سپس شخص را به مقصد اصلی خود، /question/1-superb-question redirect می‌کند.

تنظیم احراز هویت JWT

به بخش Admin>Settings از ناحیه Admin بروید، سپس روی تب Authentication > JWT کلیک کنید.

فرم JWT

در اینجا تجزیه هر یک از تنظیمات:

  • JWT Identity Provider URI: این جایی است که متابیس درخواست‌های ورود را redirect می‌کند. یعنی جایی است که کاربران شما برای ورود از طریق ارائه‌دهنده هویت می‌روند.

  • String Used by the JWT Signing Key: رشته استفاده‌شده برای seed کردن کلید خصوصی استفاده‌شده برای اعتبارسنجی پیام‌های JWT. هم متابیس و هم اپلیکیشن احراز هویت باید همان JWT signing key را داشته باشند.

پیکربندی ویژگی کاربر (اختیاری)

این تنظیمات اضافی هستند که می‌توانید پر کنید تا ویژگی‌های کاربر را به متابیس ارسال کنید.

  • Email attribute: کلید برای دریافت آدرس ایمیل هر کاربر JWT.
  • First name attribute: کلید برای دریافت نام هر کاربر JWT.
  • Last name attribute: اگر حدس زدید که این کلید برای دریافت نام خانوادگی هر کاربر JWT است، خوب پس توجه کرده‌اید.
  • Group assignment attribute: کلید برای دریافت تخصیص‌های گروه هر کاربر JWT.

می‌توانید ویژگی‌های کاربر اضافی را با اضافه کردن ویژگی‌ها به‌عنوان جفت‌های کلید/مقدار به JWT خود به متابیس ارسال کنید. این ویژگی‌ها در هر ورود همگام‌سازی می‌شوند.

پیکربندی نگاشت‌های گروه

می‌توانید از JWT خود برای اختصاص کاربران متابیس به گروه‌های متابیس سفارشی بر اساس ویژگی‌های آن‌ها استفاده کنید، مثلاً به‌طور خودکار همه با یک ویژگی JWT خاص را به گروه Sales در متابیس اختصاص دهید. این می‌تواند برای مدیریت مجوزها در مقیاس مفید باشد.

می‌توانید تخصیص‌های گروه JWT را از طریق رابط Admin متابیس، یا با تنظیم متغیرهای محیطی پیکربندی کنید.

پیکربندی نگاشت گروه در متابیس

  1. گروه‌ها را به JWT خود اضافه کنید: groups: ["group_name"]. کلید ویژگی (مثلاً groups) باید با Group assignment attribute در متابیس تطبیق داشته باشد.

  2. در تنظیمات JWT متابیس، زیر Group Sync، Synchronize Group Memberships را toggle کنید

  3. اگر نام‌های گروه در JWT شما با نام‌های گروه متابیس تطبیق داشته باشند، به‌طور خودکار همگام‌سازی می‌شوند، و نیازی به تنظیم دستی نگاشت‌ها ندارید.

  4. در غیر این صورت، روی New mapping کلیک کنید و نام یک گروه JWT را اضافه کنید.

  5. در ردیفی که ظاهر می‌شود، روی منوی dropdown کلیک کنید تا گروه(های) متابیس که این باید به آن نگاشت شود را انتخاب کنید. نگاشت‌های گروه متابیس JWT

  6. این را برای هر یک از گروه‌هایی که می‌خواهید نگاشت کنید تکرار کنید.

پیکربندی نگاشت گروه از طریق متغیرهای محیطی

می‌توانید از متغیرهای محیطی زیر برای پیکربندی نگاشت‌های گروه JTW استفاده کنید به جای پیکربندی آن‌ها در تنظیمات Admin متابیس:

  • MB_JWT_ATTRIBUTE_GROUPS برای مشخص کردن کلید برای دریافت گروه‌های کاربر JWT؛

  • MB_JWT_GROUP_SYNC برای روشن یا خاموش کردن همگام‌سازی گروه (همگام‌سازی به‌طور پیش‌فرض خاموش است).

    MB_JWT_GROUP_SYNC=true
    
  • MB_JWT_GROUP_MAPPINGS برای پیکربندی نگاشت گروه. یک object JSON می‌پذیرد که کلیدها گروه‌های JWT هستند و مقادیر لیست‌هایی از IDهای گروه متابیس هستند. به‌عنوان مثال:

    MB_JWT_GROUP_MAPPINGS='{"extHR":[7], "extSales":[3,4]}'
    

    جایی که extHR، extSales نام‌های گروه‌های JWT هستند و 3،4،7 IDهای گروه‌های متابیس هستند.

    می‌توانید ID گروه متابیس را در URL برای صفحه گروه پیدا کنید، مثل http://your-metabase-url/admin/people/groups/<ID>. گروه "All Users" ID 1 دارد و گروه "Administrators" ID 2 دارد.

اگر نگاشت‌های گروه مشخص نشده باشند، متابیس گروه‌ها را بر اساس نام تطبیق می‌دهد

اگر هیچ نگاشت گروهی را در تنظیمات Admin متابیس یا از طریق متغیرهای محیطی MB_JWT_GROUP_MAPPINGS مشخص نکنید، متابیس سعی می‌کند گروه‌های متابیس را به کاربران بر اساس نام‌های تطبیق‌دار اختصاص دهد. اگر نام‌های گروه‌ها در آرایه ویژگی گروه JWT دقیقاً با نام‌های گروه متابیس تطبیق داشته باشند (مثلاً هر دو "Sales" هستند)، گروه‌ها به‌طور خودکار نگاشت می‌شوند.

اگر نگاشت‌های گروه را به صورت دستی اضافه کنید، متابیس سعی نمی‌کند همچنین گروه‌ها را بر اساس نام‌ها تطبیق دهد.

ایجاد حساب‌های متابیس با SSO

پلن‌های پولی برای هر حساب اضافی شارژ می‌کنند.

یک ورود SSO جدید به‌طور خودکار یک حساب متابیس جدید ایجاد می‌کند.

حساب‌های متابیس ایجادشده با ورود ارائه‌دهنده هویت خارجی رمز عبور ندارند. افرادی که با استفاده از یک IdP برای متابیس ثبت‌نام می‌کنند باید همچنان از IdP برای ورود به متابیس استفاده کنند.

غیرفعال کردن ورود با رمز عبور

از قفل شدن خارج از متابیس خود جلوگیری کنید! این تنظیم برای همه حساب‌های متابیس اعمال می‌شود، از جمله حساب ادمین متابیس شما. توصیه می‌کنیم که احراز هویت رمز عبور را فعال نگه دارید. این شما را از قفل شدن خارج از متابیس در صورت هر مشکلی با SSO محافظت می‌کند.

برای اینکه از افراد بخواهید با SSO وارد شوند، احراز هویت رمز عبور را از Admin settings > Authentication غیرفعال کنید.

غیرفعال کردن رمز عبور

یادداشتی دربارهٔ Azure

اگر از Azure استفاده می‌کنید، ممکن است نیاز به استفاده از Azure AD B2C داشته باشید. نمای کلی tokenهای آن‌ها را بررسی کنید.

کد مثال با استفاده از احراز هویت مبتنی بر JWT

می‌توانید کد مثال که از احراز هویت JWT استفاده می‌کند را در مخزن مثال‌های SSO پیدا کنید.