احراز هویت مبتنی بر JWT
میتوانید متابیس را به ارائهدهنده هویت خود با استفاده از JSON Web Tokens (JWT) برای احراز هویت افراد متصل کنید.
جریان معمولی برای یک تعامل SSO مبتنی بر JWT با متابیس
فرض کنید سایت شما localhost است که روی پورت 3000 سرو میدهد:
- شخص سعی میکند یک سؤال را مشاهده کند، مثلاً
http://localhost:3000/question/1-superb-question. - اگر شخص وارد نشده باشد، متابیس آنها را به
http://localhost:3000/auth/ssoredirect میکند. - با حفظ URI اصلی
/question/1-superb-question، متابیس شخص را به ارائهدهنده SSO (اپلیکیشن احراز هویت) redirect میکند. - شخص با استفاده از فرم پایه وارد میشود.
- در صورت ورود موفق، اپلیکیشن احراز هویت شما باید یک درخواست GET به endpoint متابیس شما با token و URI "return to" ارسال کند:
http://localhost:3000/auth/sso?jwt=TOKEN_GOES_HERE&return_to=/question/1-superb-question. - متابیس JSON Web Token را تأیید میکند، شخص را وارد میکند، سپس شخص را به مقصد اصلی خود،
/question/1-superb-questionredirect میکند.
تنظیم احراز هویت JWT
به بخش Admin>Settings از ناحیه Admin بروید، سپس روی تب Authentication > 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 متابیس، یا با تنظیم متغیرهای محیطی پیکربندی کنید.
پیکربندی نگاشت گروه در متابیس
گروهها را به JWT خود اضافه کنید:
groups: ["group_name"]. کلید ویژگی (مثلاًgroups) باید با Group assignment attribute در متابیس تطبیق داشته باشد.در تنظیمات JWT متابیس، زیر Group Sync، Synchronize Group Memberships را toggle کنید
اگر نامهای گروه در JWT شما با نامهای گروه متابیس تطبیق داشته باشند، بهطور خودکار همگامسازی میشوند، و نیازی به تنظیم دستی نگاشتها ندارید.
در غیر این صورت، روی New mapping کلیک کنید و نام یک گروه JWT را اضافه کنید.
در ردیفی که ظاهر میشود، روی منوی dropdown کلیک کنید تا گروه(های) متابیس که این باید به آن نگاشت شود را انتخاب کنید.

این را برای هر یک از گروههایی که میخواهید نگاشت کنید تکرار کنید.
پیکربندی نگاشت گروه از طریق متغیرهای محیطی
میتوانید از متغیرهای محیطی زیر برای پیکربندی نگاشتهای گروه JTW استفاده کنید به جای پیکربندی آنها در تنظیمات Admin متابیس:
MB_JWT_ATTRIBUTE_GROUPSبرای مشخص کردن کلید برای دریافت گروههای کاربر JWT؛MB_JWT_GROUP_SYNCبرای روشن یا خاموش کردن همگامسازی گروه (همگامسازی بهطور پیشفرض خاموش است).MB_JWT_GROUP_SYNC=trueMB_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 پیدا کنید.