ورود یکپارچه (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 ID | https://login.microsoftonline.com/<tenant id>/v2.0 |
| Okta | https://<your Okta domain>/oauth2/default یا https://<your Okta domain> |
| Keycloak | https://<your Keycloak host>/realms/<realm> |
| AD FS (نسخه ۲۰۱۶ یا جدیدتر) | https://<your AD FS host>/adfs |
| Google Workspace | https://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.issuer | issuer از مرحله 1 |
public.oauth.oidc.clientId | شناسه کلاینت از مرحله 1 |
public.oauth.oidc.redirectPath | مسیر URI بازگشت از مرحله 1 |
public.oauth.oidc.scope | دامنههایی که MonoChat درخواست میکند |
public.oauth.oidc.buttonLabel | متن دکمه ورود. اگر خالی باشد، "ورود با SSO" به زبان فرد نشان داده میشود |
oauth.oidc.clientSecret | client secret. روی سرور میماند |
oauth.oidc.autoCreateAccounts | true حساب 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 (issuerhttps://accounts.google.com) MonoChat بهجای نشانی ایمیل، claimhdیعنی دامنه Workspace حساب را بررسی میکند، چون یک حساب شخصی Google میتواند از نشانی هر دامنهای استفاده کند.
SSO را تنها روش ورود کنید
public.auth.methodsرا روی["oidc"]بگذارید. آنگاه صفحه ورود فقط دکمه SSO را نشان میدهد و سرور ورود با رمز عبور و حسابهای اجتماعی را رد میکند.- کاربران root super (کاربرانی با نقش root super در سازمان ریشه) همچنان میتوانند با رمز عبور خود در
/auth/signin?fallback=1وارد شوند، تا اگر IdP از کار افتاد نصب هرگز قفل نشود. - برای جلوگیری از باز کردن سازمانهای جدید توسط حسابهای تازه SSO،
public.disableTenantCreationرا رویtrueبگذارید. آنگاه فقط افرادی با نقش مناسب در یک سازمان میتوانند زیر آن سازمان بسازند.
شبکه
/api/oauth/oidc/authorizeوredirectPathخود را برای افرادی که وارد میشوند در دسترس نگه دارید. هر دو در مرورگر آنها باز میشوند.- سرور MonoChat باید از طریق HTTPS به سند کشف، نقطه پایانی توکن و مجموعه کلیدهای (
jwks_uri) IdP شما دسترسی داشته باشد.
محدودیتها
- برنامه موبایل MonoChat هنوز SSO ندارد. اگر SSO را تنها روش ورود کنید، نمایندگان نمیتوانند وارد برنامه موبایل شوند.
- خروج از MonoChat فرد را از IdP خارج نمیکند و خروج از IdP هنوز او را از MonoChat خارج نمیکند.
تنظیمات خود را بررسی کنید
- صفحه ورود را باز کنید و روی دکمه SSO کلیک کنید. در IdP خود وارد شوید؛ پنجره بازشو بسته میشود و شما وارد MonoChat شدهاید.
- با فردی که هنوز حساب MonoChat ندارد وارد شوید و مطمئن شوید حساب ساخته میشود (یا اگر
autoCreateAccountsرا روشن نکردهاید، رد میشود). - اگر
allowedEmailDomainsرا تنظیم کردهاید، با فردی از دامنهای دیگر امتحان کنید و مطمئن شوید ورود رد میشود. - اگر
public.auth.methodsرا تنظیم کردهاید، مطمئن شوید ورود با رمز عبور رد میشود و یک کاربر root super همچنان میتواند در/auth/signin?fallback=1وارد شود.