پرش به مطلب اصلی

ورود یکپارچه (SSO) برای نصب On-Premise

این صفحه برای گردانندگان نصب On-Premise MonoChat است. توضیح می‌دهد چگونه به کارکنان خود اجازه دهید با ارائه‌دهنده هویت (IdP) شرکت از طریق OpenID Connect (OIDC) وارد شوند؛ برای نمونه Microsoft Entra ID، Okta، Keycloak، AD FS یا Google Workspace.

ورود یکپارچه برای کل نصب در تنظیمات سرور انجام می‌شود، نه برای هر سازمان جداگانه. یک حساب MonoChat می‌تواند به چند سازمان تعلق داشته باشد و افراد پیش از انتخاب سازمان وارد می‌شوند. ورود یک حساب می‌دهد، نه دسترسی: فرد فقط پس از آن‌که سازمانی او را دعوت کند و نقشی به او بدهد، آن سازمان را می‌بیند.

ورود چگونه کار می‌کند​

وقتی کسی در صفحه ورود روی دکمه SSO کلیک می‌کند، MonoChat صفحه ورود IdP شما را در یک پنجره بازشو باز می‌کند. پس از ورود فرد در آن‌جا، IdP مرورگر را با یک کد یک‌بارمصرف به MonoChat برمی‌گرداند. سرور MonoChat کد را با یک ID token مبادله می‌کند و پیش از ورود فرد آن را بررسی می‌کند:

  • نقاط پایانی و کلیدهای امضای IdP در هر ورود از سند کشف آن، <issuer>/.well-known/openid-configuration، خوانده می‌شوند.
  • ورود از جریان کد مجوز با PKCE (S256)، یک state و یک nonce استفاده می‌کند. هر درخواست ورود ۱۰ دقیقه معتبر است و یک بار قابل استفاده است.
  • ID token باید با یکی از کلیدهای IdP امضا شده باشد و issuer شما (iss)، شناسه کلاینت شما (aud)، nonce درخواست و زمان انقضایی (exp) که هنوز نگذشته را داشته باشد.
  • ID token باید نشانی ایمیل فرد (email) را داشته باشد. اگر IdP اعلام کند نشانی تأیید نشده است (email_verified: false)، ورود رد می‌شود.

1. MonoChat را نزد ارائه‌دهنده هویت ثبت کنید​

در IdP خود یک برنامه (کلاینت) برای MonoChat با این مقادیر بسازید:

تنظیم در IdPمقدار
نوع برنامهبرنامه وب با client secret (کلاینت محرمانه)
URI بازگشت پس از ورودhttps://<your MonoChat domain>/api/oauth/oidc/redirect
نوع Grantکد مجوز (Authorization code)
دامنه‌ها (Scopes)openid email profile
احراز هویت کلاینت در نقطه پایانی توکنclient secret ارسال‌شده با احراز هویت HTTP Basic (client_secret_basic)

مطمئن شوید ID token دارای claim email است. شناسه کلاینت، client secret و issuer را یادداشت کنید. issuer همان مقدار issuer در سند کشف IdP است. شکل‌های رایج:

ارائه‌دهنده هویتIssuer
Microsoft Entra IDhttps://login.microsoftonline.com/<tenant id>/v2.0
Oktahttps://<your Okta domain>/oauth2/default یا https://<your Okta domain>
Keycloakhttps://<your Keycloak host>/realms/<realm>
AD FS (نسخه ۲۰۱۶ یا جدیدتر)https://<your AD FS host>/adfs
Google Workspacehttps://accounts.google.com

<issuer>/.well-known/openid-configuration را در مرورگر باز کنید و مقدار issuer آن را دقیقاً، همراه با / پایانی اگر دارد، کپی کنید. وقتی این دو متفاوت باشند، MonoChat اجازه ورود به هیچ‌کس نمی‌دهد.

2. تنظیمات را اضافه کنید​

بلوک‌های oidc را به تنظیمات سرور اضافه کنید و MonoChat را دوباره راه‌اندازی کنید. بلوک عمومی زیر public.oauth و بلوک محرمانه زیر oauth قرار می‌گیرد:

{
"oauth": {
"oidc": {
"clientSecret": "<client secret>",
"autoCreateAccounts": true,
"allowedEmailDomains": ["company.com"]
}
},
"public": {
"oauth": {
"oidc": {
"issuer": "https://login.microsoftonline.com/<tenant id>/v2.0",
"clientId": "<client id>",
"redirectPath": "/api/oauth/oidc/redirect",
"scope": "openid email profile",
"buttonLabel": "Sign in with Company SSO"
}
}
}
}
تنظیمکار آن
public.oauth.oidc.issuerissuer از مرحله 1
public.oauth.oidc.clientIdشناسه کلاینت از مرحله 1
public.oauth.oidc.redirectPathمسیر URI بازگشت از مرحله 1
public.oauth.oidc.scopeدامنه‌هایی که MonoChat درخواست می‌کند
public.oauth.oidc.buttonLabelمتن دکمه ورود. اگر خالی باشد، "ورود با SSO" به زبان فرد نشان داده می‌شود
oauth.oidc.clientSecretclient secret. روی سرور می‌ماند
oauth.oidc.autoCreateAccountstrue حساب MonoChat را در نخستین ورود فرد با SSO می‌سازد، حتی وقتی ثبت‌نام فقط با دعوت ممکن است (public.disableSignup)
oauth.oidc.allowedEmailDomainsفقط افرادی که نشانی ایمیلشان در یکی از این دامنه‌هاست می‌توانند با SSO وارد شوند. برای مجاز کردن همه دامنه‌ها آن را حذف کنید

سپس دکمه SSO در صفحه ورود نمایش داده می‌شود.

چه کسانی می‌توانند وارد شوند​

  • افراد جدید. با autoCreateAccounts: true نخستین ورود فرد با SSO حساب او را می‌سازد. بدون آن، حساب فقط زمانی ساخته می‌شود که public.disableSignup خاموش باشد یا فرد از طریق دعوت وارد شود.
  • افرادی که از قبل با همین نشانی ایمیل حساب دارند. با oauth.autoMerge: true نخستین ورود با SSO، SSO را به حساب موجود پیوند می‌دهد، اما فقط وقتی ID token اعلام کند نشانی تأیید شده است (email_verified: true). در غیر این صورت، و بدون autoMerge همیشه، MonoChat از فرد می‌خواهد یک بار با رمز عبور وارد شود و سپس SSO را به حساب پیوند می‌دهد؛ پذیرفتن دعوت به یک سازمان هم آن را پیوند می‌دهد. Microsoft Entra ID و AD FS مقدار email_verified را نمی‌فرستند، پس با آن‌ها ورود با رمز عبور را تا زمانی که همه SSO را پیوند دهند مجاز نگه دارید، یا افراد را دوباره دعوت کنید.
  • دامنه‌های مجاز. با allowedEmailDomains نشانی هر دامنه دیگری رد می‌شود. در Google Workspace (issuer https://accounts.google.com) MonoChat به‌جای نشانی ایمیل، claim hd یعنی دامنه Workspace حساب را بررسی می‌کند، چون یک حساب شخصی Google می‌تواند از نشانی هر دامنه‌ای استفاده کند.

SSO را تنها روش ورود کنید​

  1. public.auth.methods را روی ["oidc"] بگذارید. آن‌گاه صفحه ورود فقط دکمه SSO را نشان می‌دهد و سرور ورود با رمز عبور و حساب‌های اجتماعی را رد می‌کند.
  2. کاربران root super (کاربرانی با نقش root super در سازمان ریشه) همچنان می‌توانند با رمز عبور خود در /auth/signin?fallback=1 وارد شوند، تا اگر IdP از کار افتاد نصب هرگز قفل نشود.
  3. برای جلوگیری از باز کردن سازمان‌های جدید توسط حساب‌های تازه SSO، public.disableTenantCreation را روی true بگذارید. آن‌گاه فقط افرادی با نقش مناسب در یک سازمان می‌توانند زیر آن سازمان بسازند.

شبکه​

  • /api/oauth/oidc/authorize و redirectPath خود را برای افرادی که وارد می‌شوند در دسترس نگه دارید. هر دو در مرورگر آن‌ها باز می‌شوند.
  • سرور MonoChat باید از طریق HTTPS به سند کشف، نقطه پایانی توکن و مجموعه کلیدهای (jwks_uri) IdP شما دسترسی داشته باشد.

محدودیت‌ها​

  • برنامه موبایل MonoChat هنوز SSO ندارد. اگر SSO را تنها روش ورود کنید، نمایندگان نمی‌توانند وارد برنامه موبایل شوند.
  • خروج از MonoChat فرد را از IdP خارج نمی‌کند و خروج از IdP هنوز او را از MonoChat خارج نمی‌کند.

تنظیمات خود را بررسی کنید​

  1. صفحه ورود را باز کنید و روی دکمه SSO کلیک کنید. در IdP خود وارد شوید؛ پنجره بازشو بسته می‌شود و شما وارد MonoChat شده‌اید.
  2. با فردی که هنوز حساب MonoChat ندارد وارد شوید و مطمئن شوید حساب ساخته می‌شود (یا اگر autoCreateAccounts را روشن نکرده‌اید، رد می‌شود).
  3. اگر allowedEmailDomains را تنظیم کرده‌اید، با فردی از دامنه‌ای دیگر امتحان کنید و مطمئن شوید ورود رد می‌شود.
  4. اگر public.auth.methods را تنظیم کرده‌اید، مطمئن شوید ورود با رمز عبور رد می‌شود و یک کاربر root super همچنان می‌تواند در /auth/signin?fallback=1 وارد شود.