ورود سازمانی (اکتیو دایرکتوری، Azure AD و LDAP)

کارکنان با همان حساب شبکه یا حساب سازمانی وارد پرسینو می‌شوند؛ راهنمای گام‌به‌گام برای واحد فناوری اطلاعات.

رفتن به تنظیمات تیم‌ها

🏢 ورود سازمانی چیست؟

با «ورود سازمانی»، کارکنان سازمان با همان حساب شبکه (اکتیو دایرکتوری) یا حساب سازمانی (Azure AD / Entra ID، Keycloak، Google Workspace و هر سرویس استاندارد OpenID Connect) وارد پرسینو می‌شوند و خودکار با نقش درست عضو تیم سازمان می‌شوند.

مسیر: پنل › تنظیمات › تیم‌ها › دکمه‌ی «ورود سازمانی» روی کارت تیم. فقط مالک تیم می‌تواند تنظیمات را تغییر دهد؛ مدیران تیم آن را می‌بینند و «آزمایش اتصال» می‌زنند.

رمز کارکنان هیچ‌وقت در پرسینو ذخیره نمی‌شود.
ساختن و روشن‌کردنِ اتصال بسته‌ی «سازمانی ویژه» را می‌خواهد؛ ورودِ کارکنان پس از آن هرگز قفل نمی‌شود.

① تأیید دامنه‌ی ایمیل سازمان (لازم)

  1. ۱ در بخش «دامنه‌های ایمیل سازمان» دامنه را بنویسید (مثلاً company.ir) و «افزودن دامنه» را بزنید.
  2. ۲ در DNS دامنه یک رکورد TXT بسازید. مقدارش همان porsino-verification=… است که پرسینو نشان می‌دهد؛ دکمه‌ی کپی کنارش هست.
  3. ۳ چند دقیقه بعد «تأیید» را بزنید.
رکورد DNS نمونه
Type:  TXT
Name:  _porsino.company.ir   (or company.ir)
Value: porsino-verification=…
در نصب درون‌سازمانی پرسینو که DNS عمومی ندارد، مدیر سامانه می‌تواند دامنه را با «تأیید دستی» تأیید کند.
تا دامنه تأیید نشود، هیچ کارمندی با ورود سازمانی وارد نمی‌شود — این جلوی سوءاستفاده‌ی دیگران از نام سازمان را می‌گیرد.
دامنه‌های ایمیل همگانی (gmail.com و مانند آن) پذیرفته نمی‌شوند.

② روش اول: اکتیو دایرکتوری / LDAP

روش را روی «LDAP / AD» بگذارید. سرور پرسینو با یک حساب سرویس به دایرکتوری وصل می‌شود، کاربر را پیدا می‌کند و رمزش را با bind می‌سنجد.

  1. ۱ میزبان: کنترلر دامنه یا نام سرویس LDAP.
  2. ۲ پورت و رمزنگاری: LDAPS روی 636؛ برای StartTLS معمولاً 389. «بدون TLS» رمز را بی‌پرده می‌فرستد؛ فقط در شبکه‌ی داخلی امن.
  3. ۳ گواهی CA سازمان: اگر گواهی کنترلر دامنه را CA داخلی سازمان صادر کرده است.
  4. ۴ Bind DN و رمز حساب سرویس: یک حساب فقط‌خواندنی. رمز رمزشده ذخیره می‌شود و دیگر نمایش داده نمی‌شود.
  5. ۵ Base DN جست‌وجو و فیلتر کاربر را بنویسید. {username} همان چیزی است که کاربر می‌نویسد و امن escape می‌شود.
مقدارهای نمونه‌ی اکتیو دایرکتوری
Host: dc1.corp.local
Port: 636 (LDAPS)
Bind DN: CN=porsino-svc,OU=Service,DC=corp,DC=local
Base DN: DC=corp,DC=local
Filter: (&(objectClass=user)(sAMAccountName={username}))
نگاشت ویژگی‌ها (پیش‌فرض AD): ایمیل mail، نام displayName، کد پرسنلی employeeID، واحد department، شناسه‌ی پایدار objectGUID و گروه‌ها memberOf. برای OpenLDAP دکمه‌ی «پیش‌فرض‌های OpenLDAP» را بزنید.
کاربر می‌تواند ali یا CORP\ali بنویسد. برای ورود با ali@company.ir هم، userPrincipalName را به فیلتر اضافه کنید.
حسابی که در AD غیرفعال شود، در اولین تلاش ورود از تیم برداشته می‌شود.
سرور پرسینو باید به پورت LDAPS برسد. روی سرویس عمومی porsino.com نشانی‌های شبکه‌ی داخلی (10.x، 192.168.x و …) پذیرفته نمی‌شوند؛ یا LDAPS را روی یک نشانی عمومی (فقط برای IP سرور پرسینو) باز کنید، یا از OpenID Connect استفاده کنید.

② روش دوم: OpenID Connect — Azure AD / Microsoft Entra ID

روش را روی «OpenID Connect» بگذارید و نشانی Redirect URI را که پرسینو نشان می‌دهد کپی کنید.

  1. ۱ در Entra admin center › App registrations › New registration یک اپلیکیشن بسازید. «Accounts in this organizational directory only» و Redirect URI از نوع Web.
  2. ۲ در Certificates & secrets یک client secret تازه بسازید و مقدار Value را در «Client Secret» پرسینو بگذارید.
  3. ۳ Issuer و Client ID را در پرسینو بنویسید؛ Scopeها: openid email profile. Issuer حتماً با شناسه‌ی tenant باشد، نه common.
  4. ۴ برای نقش‌ها: Token configuration › Add groups claim (Security groups). در نگاشت نقش‌ها Object ID هر گروه را بنویسید؛ اگر App roles دارید، claim را roles بگذارید.
مقدارهای Azure AD
Redirect URI: https://porsino.com/api/v1/auth/sso/callback
Issuer: https://login.microsoftonline.com/<tenant-id>/v2.0
Client ID: <Application (client) ID>
Scopes: openid email profile
اگر کاربران claim ایمیل ندارند، «claim ایمیل» را preferred_username بگذارید.

🔑 Keycloak و Google Workspace

  1. ۱ Keycloak: در Realm › Clients یک client از نوع OpenID Connect بسازید. Client authentication روشن، Standard flow روشن و Valid redirect URIs همان نشانی بالا.
  2. ۲ Client secret را از Credentials در پرسینو بگذارید.
  3. ۳ برای گروه‌ها یک mapper از نوع Group Membership با نام claim برابر groups بسازید. مقدارها مثل /hr-admins می‌آیند؛ همین‌ها را در نگاشت نقش‌ها بنویسید.
  4. ۴ Google Workspace: در Google Cloud Console یک OAuth client از نوع Web بسازید و Redirect URI را ثبت کنید. گوگل گروه‌ها را در توکن نمی‌فرستد، پس همه با «نقش پیش‌فرض» عضو می‌شوند.
Issuer
Keycloak: https://<keycloak-host>/realms/<realm>
Google: https://accounts.google.com
«آزمایش اتصال» سند discovery و کلیدهای امضا را می‌خواند و می‌گوید چیزی کم است یا نه.

③ نقش‌ها، روشن‌کردن و «فقط ورود سازمانی»

  1. ۱ گروه‌ها را به نقش‌ها نگاشت کنید؛ مثلاً مدیران منابع انسانی → «مدیر»، کارشناسان → «طراح». بالاترین نقش جورشده اعمال می‌شود و در هر ورود با سازمان هم‌گام می‌شود.
  2. ۲ «نقش پیش‌فرض» را برای کسانی که در هیچ گروه نگاشت‌شده‌ای نیستند انتخاب کنید. با «فقط اعضای گروه‌های نگاشت‌شده» آن‌ها اصلاً وارد نمی‌شوند.
  3. ۳ شناسه‌ی سازمان را بنویسید، مثلاً acme. کارکنان در صفحه‌ی ورود به‌جای ایمیل همین را می‌نویسند یا لینک مستقیم را باز می‌کنند.
  4. ۴ «ورود سازمانی روشن باشد» را بزنید و ذخیره کنید.
لینک مستقیم ورود کارکنان
https://porsino.com/login?sso=acme
کارمندی که حساب ندارد در اولین ورود حساب می‌گیرد؛ کسی که قبلاً با همان ایمیل ثبت‌نام کرده به همان حساب وصل می‌شود.
همه‌ی تغییرها، ورودها و ورودهای ناموفق در «رخدادها» ثبت می‌شوند و «کاربران سازمانی» فهرست کسانی است که وارد شده‌اند (با کد پرسنلی و واحد).
«فقط ورود سازمانی» را وقتی روشن کنید که مطمئن شدید ورود کار می‌کند؛ از آن به بعد ورود با رمز و گوگل برای ایمیل‌های دامنه‌های تأییدشده بسته می‌شود. مالک تیم (برای دسترسی اضطراری) و مدیر سامانه همیشه با رمز هم وارد می‌شوند.

می‌خواهید همین را روی فرم خودتان پیاده کنید؟ ساخت حساب و استفاده از پرسینو رایگان است.

شروع رایگان