CINXE.COM
راهنمای CAS Development - مرکز فناوری اطلاعات و ارتباطات
<!DOCTYPE html> <html class="rtl" dir="rtl" lang="fa-IR"> <head> <title>راهنمای CAS Development - مرکز فناوری اطلاعات و ارتباطات</title> <meta content="initial-scale=1.0, width=device-width" name="viewport" /> <meta content="IE=edge" http-equiv="x-ua-compatible" /> <meta content="text/html; charset=UTF-8" http-equiv="content-type" /> <script data-senna-track="permanent" src="/o/frontend-js-svg4everybody-web/index.js" type="text/javascript"></script> <script data-senna-track="permanent" src="/o/frontend-compatibility-ie/closest.js" type="text/javascript"></script> <script data-senna-track="permanent" src="/o/frontend-compatibility-ie/control.menu.js" type="text/javascript"></script> <script data-senna-track="permanent" src="/o/frontend-compatibility-ie/core-js-bundle.min.js" type="text/javascript"></script> <script data-senna-track="permanent" src="/o/frontend-compatibility-ie/fetch.js" type="text/javascript"></script> <script data-senna-track="permanent" src="/o/frontend-compatibility-ie/intersection-observer.js" type="text/javascript"></script> <script data-senna-track="permanent" src="/o/frontend-compatibility-ie/remove.js" type="text/javascript"></script> <script data-senna-track="permanent" src="/o/frontend-compatibility-ie/svg.contains.js" type="text/javascript"></script> <script data-senna-track="permanent" src="/o/frontend-compatibility-ie/uint16array.slice.js" type="text/javascript"></script> <link data-senna-track="permanent" href="/o/frontend-compatibility-ie/css/main.css" rel="stylesheet" type="text/css"> <link data-senna-track="permanent" href="/o/frontend-theme-font-awesome-web/css/main.css" rel="stylesheet" type="text/css" /> <link data-senna-track="temporary" href="https://ictc.sharif.ir/cas-development" rel="canonical" /> <link data-senna-track="temporary" href="https://ictc.sharif.ir/cas-development/tr/" hreflang="tr-TR" rel="alternate" /> <link data-senna-track="temporary" href="https://ictc.sharif.ir/cas-development" hreflang="fa-IR" rel="alternate" /> <link data-senna-track="temporary" href="https://ictc.sharif.ir/cas-development/ru/" hreflang="ru-RU" rel="alternate" /> <link data-senna-track="temporary" href="https://ictc.sharif.ir/cas-development/ar/" hreflang="ar-SA" rel="alternate" /> <link data-senna-track="temporary" href="https://ictc.sharif.ir/cas-development/en/" hreflang="en-US" rel="alternate" /> <link data-senna-track="temporary" href="https://ictc.sharif.ir/cas-development" hreflang="x-default" rel="alternate" /> <meta property="og:locale" content="fa_IR"> <meta property="og:locale:alternate" content="fa_IR"> <meta property="og:locale:alternate" content="en_US"> <meta property="og:locale:alternate" content="ar_SA"> <meta property="og:locale:alternate" content="tr_TR"> <meta property="og:locale:alternate" content="ru_RU"> <meta property="og:site_name" content="مرکز فناوری اطلاعات و ارتباطات"> <meta property="og:title" content="راهنمای CAS Development - مرکز فناوری اطلاعات و ارتباطات - پورتال دانشگاه شریف"> <meta property="og:type" content="website"> <meta property="og:url" content="https://ictc.sharif.ir/cas-development"> <link href="/favicon.ico" rel="icon" /> <link class="lfr-css-file" data-senna-track="temporary" href="https://ictc.sharif.ir/o/shu-theme/css/clay.css?browserId=ie&themeId=shutheme_WAR_shutheme&minifierType=css&languageId=fa_IR&b=7307&t=1737807942000" id="liferayAUICSS" rel="stylesheet" type="text/css" /> <link data-senna-track="temporary" href="/o/frontend-css-web/main.css?browserId=ie&themeId=shutheme_WAR_shutheme&minifierType=css&languageId=fa_IR&b=7307&t=1737807885743" id="liferayPortalCSS" rel="stylesheet" type="text/css" /> <link data-senna-track="temporary" href="/combo?browserId=ie&minifierType=&themeId=shutheme_WAR_shutheme&languageId=fa_IR&b=7307&com_liferay_knowledge_base_web_portlet_DisplayPortlet:%2Fadmin%2Fcss%2Fcommon.css&com_liferay_knowledge_base_web_portlet_DisplayPortlet:%2Fdisplay%2Fcss%2Fmain.css&com_liferay_portal_search_web_portlet_SearchPortlet:%2Fcss%2Fmain.css&com_liferay_product_navigation_product_menu_web_portlet_ProductMenuPortlet:%2Fcss%2Fmain.css&com_liferay_product_navigation_user_personal_bar_web_portlet_ProductNavigationUserPersonalBarPortlet:%2Fcss%2Fmain.css&t=1737807942000" id="324f7d84" rel="stylesheet" type="text/css" /> <script data-senna-track="temporary" type="text/javascript"> // <![CDATA[ var Liferay = Liferay || {}; Liferay.Browser = { acceptsGzip: function() { return true; }, getMajorVersion: function() { return 7.0; }, getRevision: function() { return '7.0'; }, getVersion: function() { return '7.0'; }, isAir: function() { return false; }, isChrome: function() { return false; }, isEdge: function() { return false; }, isFirefox: function() { return false; }, isGecko: function() { return false; }, isIe: function() { return true; }, isIphone: function() { return false; }, isLinux: function() { return false; }, isMac: function() { return false; }, isMobile: function() { return false; }, isMozilla: function() { return false; }, isOpera: function() { return false; }, isRtf: function() { return true; }, isSafari: function() { return false; }, isSun: function() { return false; }, isWebKit: function() { return false; }, isWindows: function() { return true; } }; Liferay.Data = Liferay.Data || {}; Liferay.Data.ICONS_INLINE_SVG = true; Liferay.Data.NAV_SELECTOR = '#navigation'; Liferay.Data.NAV_SELECTOR_MOBILE = '#navigationCollapse'; Liferay.Data.isCustomizationView = function() { return false; }; Liferay.Data.notices = [ ]; Liferay.PortletKeys = { DOCUMENT_LIBRARY: 'com_liferay_document_library_web_portlet_DLPortlet', DYNAMIC_DATA_MAPPING: 'com_liferay_dynamic_data_mapping_web_portlet_DDMPortlet', ITEM_SELECTOR: 'com_liferay_item_selector_web_portlet_ItemSelectorPortlet' }; Liferay.PropsValues = { JAVASCRIPT_SINGLE_PAGE_APPLICATION_TIMEOUT: 0, NTLM_AUTH_ENABLED: false, UPLOAD_SERVLET_REQUEST_IMPL_MAX_SIZE: 512000000 }; Liferay.ThemeDisplay = { getLayoutId: function() { return '211'; }, getLayoutRelativeControlPanelURL: function() { return '/group/ictc/~/control_panel/manage'; }, getLayoutRelativeURL: function() { return '/cas-development'; }, getLayoutURL: function() { return 'https://ictc.sharif.ir/cas-development'; }, getParentLayoutId: function() { return '72'; }, isControlPanel: function() { return false; }, isPrivateLayout: function() { return 'false'; }, isVirtualLayout: function() { return false; }, getBCP47LanguageId: function() { return 'fa-IR'; }, getCanonicalURL: function() { return 'https\x3a\x2f\x2fictc\x2esharif\x2eir\x2fcas-development'; }, getCDNBaseURL: function() { return 'https://ictc.sharif.ir'; }, getCDNDynamicResourcesHost: function() { return ''; }, getCDNHost: function() { return ''; }, getCompanyGroupId: function() { return '20124'; }, getCompanyId: function() { return '20098'; }, getDefaultLanguageId: function() { return 'fa_IR'; }, getDoAsUserIdEncoded: function() { return ''; }, getLanguageId: function() { return 'fa_IR'; }, getParentGroupId: function() { return '109144'; }, getPathContext: function() { return ''; }, getPathImage: function() { return '/image'; }, getPathJavaScript: function() { return '/o/frontend-js-web'; }, getPathMain: function() { return '/c'; }, getPathThemeImages: function() { return 'https://ictc.sharif.ir/o/shu-theme/images'; }, getPathThemeRoot: function() { return '/o/shu-theme'; }, getPlid: function() { return '11144'; }, getPortalURL: function() { return 'https://ictc.sharif.ir'; }, getScopeGroupId: function() { return '109144'; }, getScopeGroupIdOrLiveGroupId: function() { return '109144'; }, getSessionId: function() { return ''; }, getSiteAdminURL: function() { return 'https://ictc.sharif.ir/group/ictc/~/control_panel/manage?p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view'; }, getSiteGroupId: function() { return '109144'; }, getURLControlPanel: function() { return '/group/control_panel?refererPlid=11144'; }, getURLHome: function() { return 'https\x3a\x2f\x2fictc\x2esharif\x2eir\x2fweb\x2fguest'; }, getUserEmailAddress: function() { return ''; }, getUserId: function() { return '20103'; }, getUserName: function() { return ''; }, isAddSessionIdToURL: function() { return false; }, isImpersonated: function() { return false; }, isSignedIn: function() { return false; }, isStateExclusive: function() { return false; }, isStateMaximized: function() { return false; }, isStatePopUp: function() { return false; } }; var themeDisplay = Liferay.ThemeDisplay; Liferay.AUI = { getAvailableLangPath: function() { return 'available_languages.jsp?browserId=ie&themeId=shutheme_WAR_shutheme&colorSchemeId=01&minifierType=js&languageId=fa_IR&b=7307&t=1737966042429'; }, getCombine: function() { return true; }, getComboPath: function() { return '/combo/?browserId=ie&minifierType=&languageId=fa_IR&b=7307&t=1737807891117&'; }, getDateFormat: function() { return '%m/%d/%Y'; }, getEditorCKEditorPath: function() { return '/o/frontend-editor-ckeditor-web'; }, getFilter: function() { var filter = 'raw'; filter = 'min'; return filter; }, getFilterConfig: function() { var instance = this; var filterConfig = null; if (!instance.getCombine()) { filterConfig = { replaceStr: '.js' + instance.getStaticResourceURLParams(), searchExp: '\\.js$' }; } return filterConfig; }, getJavaScriptRootPath: function() { return '/o/frontend-js-web'; }, getLangPath: function() { return 'aui_lang.jsp?browserId=ie&themeId=shutheme_WAR_shutheme&colorSchemeId=01&minifierType=js&languageId=fa_IR&b=7307&t=1737807891117'; }, getPortletRootPath: function() { return '/html/portlet'; }, getStaticResourceURLParams: function() { return '?browserId=ie&minifierType=&languageId=fa_IR&b=7307&t=1737807891117'; } }; Liferay.authToken = '3VMFF9zg'; Liferay.currentURL = '\x2fcas-development'; Liferay.currentURLEncoded = '\x252Fcas-development'; // ]]> </script> <script src="/o/js_loader_config?t=1737807919476" type="text/javascript"></script> <script data-senna-track="permanent" src="/combo?browserId=ie&minifierType=js&languageId=fa_IR&b=7307&t=1737807892659&/o/frontend-js-aui-web/aui/aui/aui.js&/o/frontend-js-aui-web/liferay/modules.js&/o/frontend-js-aui-web/liferay/aui_sandbox.js&/o/frontend-js-aui-web/aui/attribute-base/attribute-base.js&/o/frontend-js-aui-web/aui/attribute-complex/attribute-complex.js&/o/frontend-js-aui-web/aui/attribute-core/attribute-core.js&/o/frontend-js-aui-web/aui/attribute-observable/attribute-observable.js&/o/frontend-js-aui-web/aui/attribute-extras/attribute-extras.js&/o/frontend-js-aui-web/aui/event-custom-base/event-custom-base.js&/o/frontend-js-aui-web/aui/event-custom-complex/event-custom-complex.js&/o/frontend-js-aui-web/aui/oop/oop.js&/o/frontend-js-aui-web/aui/aui-base-lang/aui-base-lang.js&/o/frontend-js-aui-web/liferay/dependency.js&/o/frontend-js-aui-web/liferay/util.js&/o/frontend-js-web/loader/config.js&/o/frontend-js-web/loader/loader.js&/o/frontend-js-web/liferay/dom_task_runner.js&/o/frontend-js-web/liferay/events.js&/o/frontend-js-web/liferay/lazy_load.js&/o/frontend-js-web/liferay/liferay.js&/o/frontend-js-web/liferay/global.bundle.js&/o/frontend-js-web/liferay/portlet.js&/o/frontend-js-web/liferay/workflow.js" type="text/javascript"></script> <script data-senna-track="temporary" src="/o/js_bundle_config?t=1737807937814" type="text/javascript"></script> <script data-senna-track="temporary" type="text/javascript"> // <![CDATA[ // ]]> </script> <link data-senna-track="temporary" href="https://ictc.sharif.ir/cas-development?p_p_id=com_liferay_knowledge_base_web_portlet_DisplayPortlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=kbArticleRSS&p_p_cacheability=cacheLevelPage&_com_liferay_knowledge_base_web_portlet_DisplayPortlet_resourceClassNameId=31001&_com_liferay_knowledge_base_web_portlet_DisplayPortlet_resourcePrimKey=7048604" rel="alternate" title="RSS" type="application/rss+xml" /> <link data-senna-track="temporary" href="/o/social-bookmarks-taglib/css/main.css?browserId=ie&themeId=shutheme_WAR_shutheme&minifierType=css&languageId=fa_IR&b=7307&t=1737807942000" rel="stylesheet" type="text/css" /> <link data-senna-track="temporary" href="/o/ratings-taglib/css/main.css?browserId=ie&themeId=shutheme_WAR_shutheme&minifierType=css&languageId=fa_IR&b=7307&t=1737807942000" rel="stylesheet" type="text/css" /> <link class="lfr-css-file" data-senna-track="temporary" href="https://ictc.sharif.ir/o/shu-theme/css/main.css?browserId=ie&themeId=shutheme_WAR_shutheme&minifierType=css&languageId=fa_IR&b=7307&t=1737807942000" id="liferayThemeCSS" rel="stylesheet" type="text/css" /> <style data-senna-track="temporary" type="text/css"> #p_p_id_com_liferay_site_navigation_language_web_portlet_SiteNavigationLanguagePortlet_ .portlet-content { background-color: #; border-top-color: #; border-right-color: #; border-bottom-color: #; border-left-color: #; color: # } </style> <link href="/o/commerce-frontend-js/styles/main.css" rel="stylesheet" type="text/css" /><style data-senna-track="temporary" type="text/css"> </style> <link data-senna-track="permanent" href="https://ictc.sharif.ir/combo?browserId=ie&minifierType=css&languageId=fa_IR&b=7307&t=1737807892626&/o/frontend-admin-theme-contributor/css/main.css&/o/sain-admin-theme-contributor/css/sain-admin.css" rel="stylesheet" type = "text/css" /> <script data-senna-track="permanent" src="https://ictc.sharif.ir/combo?browserId=ie&minifierType=js&languageId=fa_IR&b=7307&t=1737807892626&/o/frontend-admin-theme-contributor/js/main.js&/o/sain-admin-theme-contributor/js/sain-admin.js" type = "text/javascript"></script> <script src="https://ictc.sharif.ir/o/adaptive-media-image-web/picturefill.min.js" type= "text/javascript"></script> <script data-senna-track="temporary" type="text/javascript"> if (window.Analytics) { window._com_liferay_document_library_analytics_isViewFileEntry = false; } </script> <script type="text/javascript"> // <![CDATA[ Liferay.on( 'ddmFieldBlur', function(event) { if (window.Analytics) { Analytics.send( 'fieldBlurred', 'Form', { fieldName: event.fieldName, focusDuration: event.focusDuration, formId: event.formId, page: event.page } ); } } ); Liferay.on( 'ddmFieldFocus', function(event) { if (window.Analytics) { Analytics.send( 'fieldFocused', 'Form', { fieldName: event.fieldName, formId: event.formId, page: event.page } ); } } ); Liferay.on( 'ddmFormPageShow', function(event) { if (window.Analytics) { Analytics.send( 'pageViewed', 'Form', { formId: event.formId, page: event.page, title: event.title } ); } } ); Liferay.on( 'ddmFormSubmit', function(event) { if (window.Analytics) { Analytics.send( 'formSubmitted', 'Form', { formId: event.formId } ); } } ); Liferay.on( 'ddmFormView', function(event) { if (window.Analytics) { Analytics.send( 'formViewed', 'Form', { formId: event.formId, title: event.title } ); } } ); // ]]> </script> <link rel="stylesheet" href="https://ictc.sharif.ir/o/shu-theme/css/fonts.css?v=2"> <link rel="stylesheet" href="https://ictc.sharif.ir/o/shu-theme/css/navbar.css"> <!--script src="https://ictc.sharif.ir/o/shu-theme/js/navbar.js"></script--> <script src="https://ictc.sharif.ir/o/shu-theme/js/jalali-moment.browser.js"></script> <script src="https://ictc.sharif.ir/o/shu-theme/js/splide.js"></script> <link rel="stylesheet" href="https://ictc.sharif.ir/o/shu-theme/css/splide.min.css"> <link rel="stylesheet" href="https://ictc.sharif.ir/o/shu-theme/css/splide-core.min.css"> <link rel="stylesheet" href="https://ictc.sharif.ir/o/shu-theme/css/themes/splide-default.min.css"> <link href="https://ictc.sharif.ir/o/shu-theme/css/aos.css" rel="stylesheet"> <script src="https://ictc.sharif.ir/o/shu-theme/js/aos.js"></script> <!--[if IE]> <link href="https://ictc.sharif.ir/o/shu-theme/css/ie.css" media="screen, projection" rel="stylesheet" type="text/css" /> <![endif]--> </head> <body class="faculty-page blue ie controls-visible yui3-skin-sam signed-out public-page organization-site"> <nav aria-label="لینکهای سریع" class="quick-access-nav" id="biou_quickAccessNav"> <h1 class="hide-accessible">پیمایش</h1> <ul> <li><a href="#main-content">صرفنظر از محتوا</a></li> </ul> </nav> <div class="d-flex flex-column min-vh-100"> <div class="offcanvas-menu"> <div class="offcanvas-inner"> <section class="sp-logo-wrapper"> <div class="container"> <div class="row"> <div class="col-12"> <div class="sp-logo float-left"> <div class="sp-column "> <div class="logo"> <a href="http://www.sharif.edu" > <picture data-fileentryid="95200"><source media="(max-width:300px)" srcset="/o/adaptive-media/image/95200/Thumbnail-300x300/logo-fa-IR.png?t=1609608338755, /o/adaptive-media/image/95200/thumbnail-600x600/logo-fa-IR.png?t=1609608338755 2x" /><source media="(max-width:600px) and (min-width:300px)" srcset="/o/adaptive-media/image/95200/thumbnail-600x600/logo-fa-IR.png?t=1609608338755" /><source media="(max-width:730px) and (min-width:600px)" srcset="/o/adaptive-media/image/95200/Preview-1000x0/logo-fa-IR.png?t=1609608338755" /><source media="(max-width:730px) and (min-width:730px)" srcset="/o/adaptive-media/image/95200/thumbnail-1700x1000/logo-fa-IR.png?t=1609608338755" /><img class="sp-default-logo" alt="" data-fileentryid="95200" src="/documents/20124/0/logo-fa-IR.png/4d9b72bc-494b-ed5a-d3bb-e7dfd319aec8?t=1609608338755" /></picture> <span class="sp-text-logo">دانشگاه صنعتی شریف</span> </a> <style> .sp-text-subsite { padding: 5px; top: -37px; } .sp-text-subsite-logo { color: #fff; font-style: normal; font-weight: 700; font-size: 1.07em; line-height: 20px; } .sp-header .sp-main-menu .navbar { padding-right: 25px !important; } @media (max-width:991px) { .sp-header .sp-logo-wrapper .sp-text-logo { display:none; } .sp-header .sp-text-subsite { top: -37px; position: relative; } .sp-header .sp-main-menu { margin: 0 4.143em 0 0; } .ltr .sp-header .sp-main-menu { margin: 0 0 0 4.143em; } .offcanvas-menu .sp-logo-wrapper .sp-text-logo { display:none; } .offcanvas-menu .sp-text-subsite { float:none !important; } } </style> <a href="./" id="sp-text-subsite" class="sp-text-subsite float-left"> <span class="sp-text-subsite-logo">مرکز فناوری اطلاعات و ارتباطات</span> </a> </div> </div> </div> <div class="sp-logo-right float-right"> <ul> <li class="d-md-none"> <a href="JavaScript:Void(0);" class="close-offcanvas" onclick="offcanvas()"> <svg class="lexicon-icon" focusable="false" viewBox="0 0 512 512"><title>بستن</title> <path class="lexicon-icon-outline" d="M295.781 256l205.205-205.205c10.998-10.998 10.998-28.814 0-39.781-10.998-10.998-28.815-10.998-39.781 0l-205.205 205.205-205.205-205.238c-10.966-10.998-28.814-10.998-39.781 0-10.998 10.998-10.998 28.814 0 39.781l205.205 205.238-205.205 205.205c-10.998 10.998-10.998 28.815 0 39.781 5.467 5.531 12.671 8.265 19.874 8.265s14.407-2.734 19.907-8.233l205.205-205.238 205.205 205.205c5.5 5.5 12.703 8.233 19.906 8.233s14.407-2.734 19.906-8.233c10.998-10.998 10.998-28.815 0-39.781l-205.238-205.205z"></path> </svg> </a> <script> function offcanvas() { var body = document.body; body.classList.toggle("offcanvas"); document.querySelector('.sp-header').classList.toggle("opacity-0"); } var specifiedElements = document.querySelector(".offcanvas-menu"); document.addEventListener('click', function(event) { var isClickInside = specifiedElements.contains(event.target); if (isClickInside) { //console.log('You clicked inside') } else { var specifiedElementss = document.querySelector("#offcanvas-toggler"); var isClickInsides = specifiedElementss.contains(event.target); if (isClickInsides) { var body = document.body; body.classList.add("offcanvas"); document.querySelector('.sp-header').classList.add("opacity-0"); } else { var body = document.body; body.classList.remove("offcanvas"); document.querySelector('.sp-header').classList.remove("opacity-0"); } } }); </script> </li> </ul> </div> </div> </div> </div> </section> <div class="sp-module"> <div class="sp-module-search"> <div class="search"> <div class="portlet-boundary portlet-boundary_com_liferay_portal_search_web_portlet_SearchPortlet_ portlet-static portlet-static-end portlet-barebone portlet-search " id="p_p_id_com_liferay_portal_search_web_portlet_SearchPortlet_"> <span id="p_com_liferay_portal_search_web_portlet_SearchPortlet"></span> <section class="portlet" id="portlet_com_liferay_portal_search_web_portlet_SearchPortlet"> <div class="portlet-content"> <div class=" portlet-content-container"> <div class="portlet-body"> <form action="https://ictc.sharif.ir/cas-development?p_p_id=com_liferay_portal_search_web_portlet_SearchPortlet&p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view&_com_liferay_portal_search_web_portlet_SearchPortlet_mvcPath=%2Fsearch.jsp&_com_liferay_portal_search_web_portlet_SearchPortlet_redirect=https%3A%2F%2Fictc.sharif.ir%2Fcas-development%3Fp_p_id%3Dcom_liferay_portal_search_web_portlet_SearchPortlet%26p_p_lifecycle%3D0%26p_p_state%3Dnormal%26p_p_mode%3Dview" class="form " data-fm-namespace="_com_liferay_portal_search_web_portlet_SearchPortlet_" id="_com_liferay_portal_search_web_portlet_SearchPortlet_fm" method="get" name="_com_liferay_portal_search_web_portlet_SearchPortlet_fm" > <fieldset class="input-container" disabled="disabled"> <input class="field form-control" id="_com_liferay_portal_search_web_portlet_SearchPortlet_formDate" name="_com_liferay_portal_search_web_portlet_SearchPortlet_formDate" type="hidden" value="1740502330878" /> <input name="p_p_id" type="hidden" value="com_liferay_portal_search_web_portlet_SearchPortlet" /><input name="p_p_lifecycle" type="hidden" value="0" /><input name="p_p_state" type="hidden" value="maximized" /><input name="p_p_mode" type="hidden" value="view" /><input name="_com_liferay_portal_search_web_portlet_SearchPortlet_mvcPath" type="hidden" value="/search.jsp" /><input name="_com_liferay_portal_search_web_portlet_SearchPortlet_redirect" type="hidden" value="https://ictc.sharif.ir/cas-development?p_p_id=com_liferay_portal_search_web_portlet_SearchPortlet&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view" /> <div class="form-group-autofit search-input-group"> <div class="form-group-item"> <div class="input-group"> <div class="input-group-item"> <input class="form-control input-group-inset input-group-inset-after search-input search-portlet-keywords-input" id="_com_liferay_portal_search_web_portlet_SearchPortlet_keywords" name="_com_liferay_portal_search_web_portlet_SearchPortlet_keywords" placeholder="جستجو" type="text" value="" /> <div class="input-group-inset-item input-group-inset-item-after"> <button class="btn btn-light btn-unstyled" onclick="_com_liferay_portal_search_web_portlet_SearchPortlet_search();" type="submit"> <span class="" > <span id="uvlz____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-search" focusable="false" ><use href="https://ictc.sharif.ir/o/shu-theme/images/clay/icons.svg#search"></use></svg></span> </span> </button> </div> </div> </div> </div> <input class="field form-control" id="_com_liferay_portal_search_web_portlet_SearchPortlet_scope" name="_com_liferay_portal_search_web_portlet_SearchPortlet_scope" type="hidden" value="this-site" /> </div> <script type="text/javascript"> // <![CDATA[ window._com_liferay_portal_search_web_portlet_SearchPortlet_search = function () { var keywords = document._com_liferay_portal_search_web_portlet_SearchPortlet_fm._com_liferay_portal_search_web_portlet_SearchPortlet_keywords.value; keywords = keywords.replace(/^\s+|\s+$/, ''); if (keywords != '') { submitForm(document._com_liferay_portal_search_web_portlet_SearchPortlet_fm); } }; // ]]> </script> </fieldset> </form> <script type="text/javascript"> // <![CDATA[ AUI().use('liferay-form', function(A) {(function() {var $ = AUI.$;var _ = AUI._; Liferay.Form.register( { id: '_com_liferay_portal_search_web_portlet_SearchPortlet_fm' , fieldRules: [ ] , onSubmit: function(event) { _com_liferay_portal_search_web_portlet_SearchPortlet_search(); event.preventDefault(); } , validateOnBlur: true } ); var onDestroyPortlet = function(event) { if (event.portletId === 'com_liferay_portal_search_web_portlet_SearchPortlet') { delete Liferay.Form._INSTANCES['_com_liferay_portal_search_web_portlet_SearchPortlet_fm']; } }; Liferay.on('destroyPortlet', onDestroyPortlet); A.all('#_com_liferay_portal_search_web_portlet_SearchPortlet_fm .input-container').removeAttribute('disabled'); Liferay.fire( '_com_liferay_portal_search_web_portlet_SearchPortlet_formReady', { formName: '_com_liferay_portal_search_web_portlet_SearchPortlet_fm' } ); })();}); // ]]> </script> </div> </div> </div> </section> </div> </div> </div> </div> <div class="sp-module"> <div class="sp-module-menu"> <ul class="nav menu-canvas"> <li class="item-1 deeper parent"> <a href=" https://ictc.sharif.ir/home "> صفحه اصلی </a> </li> <li class="item-2 deeper parent"> <a href=" JavaScript:Void(0); "> درباره مرکز </a> <span class="offcanvas-2 offcanvas-menu-toggler collapsed" data-toggle="collapse" data-target="#collapse-menu-2"> <i class="fa fa-2x fa-angle-down"></i> </span> <script> document.querySelector('.offcanvas-2').addEventListener('click', function(e) { document.querySelector('.offcanvas-2').classList.toggle('collapsed'); [].map.call(document.querySelectorAll('#collapse-menu-2'), function(el) { el.classList.toggle('show'); }); }); </script> <ul class="collapse" id="collapse-menu-2"> <li class="item-3 deeper parent"> <a href="https://ictc.sharif.ir/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D9%85%D8%B1%DA%A9%D8%B2" > معرفی مرکز </a> </li> <li class="item-4 deeper parent"> <a href="https://ictc.sharif.ir/%D9%85%D8%B1%DA%A9%D8%B2-%D8%AF%D8%A7%D8%AF%D9%87-%D8%AF%D8%A7%D9%86%D8%B4%DA%AF%D8%A7%D9%87" > مرکز داده دانشگاه </a> </li> <li class="item-5 deeper parent"> <a href="https://ictc.sharif.ir/%D8%A2%DB%8C%DB%8C%D9%86-%D9%86%D8%A7%D9%85%D9%87-%D9%81%D9%86%D8%A7%D9%88%D8%B1%DB%8C-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA" > آییننامه فناوری اطلاعات </a> </li> <li class="item-6 deeper parent"> <a href="https://ictc.sharif.ir/colleagues" > همکاران مرکز </a> </li> </ul> </li> <li class="item-7 deeper parent"> <a href=" JavaScript:Void(0); "> خدمات </a> <span class="offcanvas-7 offcanvas-menu-toggler collapsed" data-toggle="collapse" data-target="#collapse-menu-7"> <i class="fa fa-2x fa-angle-down"></i> </span> <script> document.querySelector('.offcanvas-7').addEventListener('click', function(e) { document.querySelector('.offcanvas-7').classList.toggle('collapsed'); [].map.call(document.querySelectorAll('#collapse-menu-7'), function(el) { el.classList.toggle('show'); }); }); </script> <ul class="collapse" id="collapse-menu-7"> <li class="item-8 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B4%D9%86%D8%A7%D8%B3%D9%87-%D8%B4%D8%B1%DB%8C%D9%81-%D9%88-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA" > شناسه شریف و اینترنت </a> </li> <li class="item-9 deeper parent"> <a href="https://ictc.sharif.ir/%D9%BE%D8%B3%D8%AA-%D8%A7%D9%84%DA%A9%D8%AA%D8%B1%D9%88%D9%86%DB%8C%DA%A9" > پست الکترونیکی </a> </li> <li class="item-10 deeper parent"> <a href="https://ictc.sharif.ir/%D8%AF%D8%A7%D9%85%D9%86%D9%87-%D8%B4%D8%B1%DB%8C%D9%81" > دامنه شریف </a> </li> <li class="item-11 deeper parent"> <a href="https://ictc.sharif.ir/%D9%85%DB%8C%D8%B2%D8%A8%D8%A7%D9%86%DB%8C-%D9%88%D8%A8" > میزبانی وب </a> </li> <li class="item-12 deeper parent"> <a href="https://ictc.sharif.ir/vps-service" > سرور مجازی اختصاصی (VPS) </a> </li> <li class="item-13 deeper parent"> <a href="https://ictc.sharif.ir/colocation-service" > فضای میزبانی سرور (Colocation) </a> </li> <li class="item-14 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B3%D8%A7%D9%85%D8%A7%D9%86%D9%87-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4-%D8%B3%D8%B1%DB%8C%D8%B9-hpc" > سامانه پردازش سریع (HPC) </a> </li> <li class="item-15 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B3%D8%A7%D9%85%D8%A7%D9%86%D9%87-%D9%88%DB%8C%D8%B1%D8%A7%DB%8C%D8%B4%DA%AF%D8%B1-%D9%88-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4%DA%AF%D8%B1-%D8%A8%D8%B1%D8%AE%D8%B7-latex" > سامانه ویرایشگر و پردازشگر برخط LaTex </a> </li> <li class="item-16 deeper parent"> <a href="https://ictc.sharif.ir/%D8%AE%D8%AF%D9%85%D8%A7%D8%AA-%D8%B4%D8%A8%DA%A9%D9%87-%D9%88-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D8%B1%D9%88%DB%8C%D8%AF%D8%A7%D8%AF%D9%87%D8%A7" > خدمات شبکه و اینترنت رویدادها </a> </li> <li class="item-17 deeper parent"> <a href="https://ictc.sharif.ir/%D8%AE%D8%AF%D9%85%D8%A7%D8%AA-%D8%B3%D8%AE%D8%AA-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1%DB%8C" > خدمات سخت افزاری </a> </li> <li class="item-18 deeper parent"> <a href="https://ictc.sharif.ir/%D8%A2%D9%86%D8%AA%DB%8C-%D9%88%DB%8C%D8%B1%D9%88%D8%B3" > آنتی ویروس </a> </li> <li class="item-19 deeper parent"> <a href="https://ictc.sharif.ir/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF%D9%87%D8%A7%DB%8C-%D8%AD%D8%AC%DB%8C%D9%85" > دانلودهای حجیم </a> </li> <li class="item-20 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-ftp" > سرویس FTP </a> </li> <li class="item-21 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B3%D8%A7%D9%85%D8%A7%D9%86%D9%87-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D9%BE%DB%8C%D8%A7%D9%85%DA%A9" > سامانه ارسال پیامک </a> </li> <li class="item-22 deeper parent"> <a href="https://bw.ictc.sharif.edu" > مشاهده و مدیریت ترافیک </a> </li> </ul> </li> <li class="item-23 deeper parent"> <a href=" https://ictc.sharif.ir/%D8%B3%D8%A7%D9%85%D8%A7%D9%86%D9%87-%D9%87%D8%A7 "> سامانهها </a> </li> <li class="item-24 deeper parent"> <a href=" http://noc.sharif.ir/ "> گزارش مشکل </a> </li> <li class="item-25 deeper parent"> <a href=" JavaScript:Void(0); "> راهنماها </a> <span class="offcanvas-25 offcanvas-menu-toggler collapsed" data-toggle="collapse" data-target="#collapse-menu-25"> <i class="fa fa-2x fa-angle-down"></i> </span> <script> document.querySelector('.offcanvas-25').addEventListener('click', function(e) { document.querySelector('.offcanvas-25').classList.toggle('collapsed'); [].map.call(document.querySelectorAll('#collapse-menu-25'), function(el) { el.classList.toggle('show'); }); }); </script> <ul class="collapse" id="collapse-menu-25"> <li class="item-26 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%B4%D8%B1%DB%8C%D9%81%E2%80%8C%D9%85%D9%86" > راهنمای شریفمن </a> </li> <li class="item-27 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%B4%D9%86%D8%A7%D8%B3%D9%87-%D8%B4%D8%B1%DB%8C%D9%81-%D8%A7%D8%AD%D8%B1%D8%A7%D8%B2-%D9%87%D9%88%DB%8C%D8%AA-%DB%8C%DA%A9%D9%BE%D8%A7%D8%B1%DA%86%D9%87" > راهنمای شناسه شریف و احراز هویت یکپارچه </a> </li> <li class="item-28 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A8%D9%87-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA" > راهنمای اتصال به اینترنت </a> </li> <li class="item-29 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%B1%D8%A7%D9%87-%D8%AF%D9%88%D8%B1-%D8%A8%D9%87-%D8%B4%D8%A8%DA%A9%D9%87-%D8%AF%D8%A7%D9%86%D8%B4%DA%AF%D8%A7%D9%87" > راهنمای اتصال راه دور به شبکه دانشگاه </a> </li> <li class="item-30 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D9%BE%D8%B3%D8%AA-%D8%A7%D9%84%DA%A9%D8%AA%D8%B1%D9%88%D9%86%DB%8C%DA%A9%DB%8C" > راهنمای پست الکترونیکی </a> </li> <li class="item-31 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%AF%D8%A7%D9%85%D9%86%D9%87-%D8%B4%D8%B1%DB%8C%D9%81" > راهنمای دامنه شریف </a> </li> <li class="item-32 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D9%85%DB%8C%D8%B2%D8%A8%D8%A7%D9%86%DB%8C-%D9%88%D8%A8" > راهنمای میزبانی وب </a> </li> <li class="item-33 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%B3%D8%B1%D9%88%D8%B1-%D9%85%D8%AC%D8%A7%D8%B2%DB%8C-%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B5%DB%8C-vps" > راهنمای سرور مجازی اختصاصی (VPS) </a> </li> <li class="item-34 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D9%81%D8%B6%D8%A7%DB%8C-%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B5%DB%8C-%D8%B3%D8%B1%D9%88%D8%B1-colocation-" > راهنمای فضای اختصاصی سرور (Colocation) </a> </li> <li class="item-35 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%B3%D8%A7%D9%85%D8%A7%D9%86%D9%87-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4-%D8%B3%D8%B1%DB%8C%D8%B9-hpc" > راهنمای سامانه پردازش سریع (HPC) </a> </li> <li class="item-36 deeper parent"> <a href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%A2%D9%86%D8%AA%DB%8C-%D9%88%DB%8C%D8%B1%D9%88%D8%B3%E2%80%AC%E2%80%AC" > راهنمای آنتی ویروس </a> </li> <li class="item-37 deeper parent"> <a href="https://ictc.sharif.ir/cas-development" > راهنمای CAS Development </a> </li> </ul> </li> <li class="item-38 deeper parent"> <a href=" https://ictc.sharif.ir/%D8%AA%D9%85%D8%A7%D8%B3-%D8%A8%D8%A7-%D9%85%D8%A7 "> تماس با ما </a> </li> </ul> </div> </div> <div class="sp-module"> <div class="sp-module-login"> <a data-redirect="false" href="https://ictc.sharif.ir/c/portal/login?p_l_id=11144" id="sign-in" rel="nofollow">ورود</a> </div> </div> <div class="sp-module"> <div class="sp-module-content"> </div> </div> </div> </div> <div class="d-flex flex-column flex-fill" id="wrapper" > <header class="sp-header" > <section class="sp-logo-wrapper"> <div class="container"> <div class="row"> <div class="col-12"> <div class="sp-logo float-left"> <div class="sp-column "> <div class="logo"> <a href="http://www.sharif.edu" > <picture data-fileentryid="95200"><source media="(max-width:300px)" srcset="/o/adaptive-media/image/95200/Thumbnail-300x300/logo-fa-IR.png?t=1609608338755, /o/adaptive-media/image/95200/thumbnail-600x600/logo-fa-IR.png?t=1609608338755 2x" /><source media="(max-width:600px) and (min-width:300px)" srcset="/o/adaptive-media/image/95200/thumbnail-600x600/logo-fa-IR.png?t=1609608338755" /><source media="(max-width:730px) and (min-width:600px)" srcset="/o/adaptive-media/image/95200/Preview-1000x0/logo-fa-IR.png?t=1609608338755" /><source media="(max-width:730px) and (min-width:730px)" srcset="/o/adaptive-media/image/95200/thumbnail-1700x1000/logo-fa-IR.png?t=1609608338755" /><img class="sp-default-logo" alt="" data-fileentryid="95200" src="/documents/20124/0/logo-fa-IR.png/4d9b72bc-494b-ed5a-d3bb-e7dfd319aec8?t=1609608338755" /></picture> <span class="sp-text-logo">دانشگاه صنعتی شریف</span> </a> </div> </div> </div> <div class="sp-logo-right float-right"> <ul> <li> <div class="portlet-boundary portlet-boundary_com_liferay_site_navigation_language_web_portlet_SiteNavigationLanguagePortlet_ portlet-static portlet-static-end portlet-barebone portlet-language " id="p_p_id_com_liferay_site_navigation_language_web_portlet_SiteNavigationLanguagePortlet_"> <span id="p_com_liferay_site_navigation_language_web_portlet_SiteNavigationLanguagePortlet"></span> <section class="portlet" id="portlet_com_liferay_site_navigation_language_web_portlet_SiteNavigationLanguagePortlet"> <div class="portlet-content"> <div class=" portlet-content-container"> <div class="portlet-body"> <style> .language-entry-short-text { padding: 0 0.5em; } </style> <a href="/c/portal/update_language?p_l_id=11144&redirect=%2Fcas-development&languageId=en_US" class="language-entry-short-text" lang="en-US" >en</a> </div> </div> </div> </section> </div> <style> @media screen and (max-width: 345px) { .ltr .sp-header .sp-logo-wrapper .sp-text-logo { font-size: 10px; } } </style> </li> <li> </li> <li class="d-lg-none"> <a class="navbar-light" id="offcanvas-toggler" href="javascript:void(0)" onclick="offcanvas()"> <i class="icon-menu"></i> </a> <script> function offcanvas() { var body = document.body; body.classList.toggle("offcanvas"); document.querySelector('.sp-header').classList.toggle("opacity-0"); } </script> </li> <li class="d-none d-lg-inline-block"> <div class="portlet-boundary portlet-boundary_com_liferay_product_navigation_user_personal_bar_web_portlet_ProductNavigationUserPersonalBarPortlet_ portlet-static portlet-static-end portlet-barebone portlet-user-personal-bar " id="p_p_id_com_liferay_product_navigation_user_personal_bar_web_portlet_ProductNavigationUserPersonalBarPortlet_"> <span id="p_com_liferay_product_navigation_user_personal_bar_web_portlet_ProductNavigationUserPersonalBarPortlet"></span> <span class="sign-in text-default" role="presentation"> <a href="https://ictc.sharif.ir/c/portal/login?p_l_id=11144" class="sign-in text-default" id="_com_liferay_product_navigation_user_personal_bar_web_portlet_ProductNavigationUserPersonalBarPortlet_ored____" data-redirect="false" ><svg aria-hidden="true" class="lexicon-icon lexicon-icon-user" focusable="false" ><use href="https://ictc.sharif.ir/o/shu-theme/images/clay/icons.svg#user"></use></svg><span class="taglib-icon-label">ورود</span></a> </span> <script type="text/javascript"> // <![CDATA[ (function() {var $ = AUI.$;var _ = AUI._; var signInLink = document.querySelector('.sign-in > a'); if (signInLink && signInLink.dataset.redirect === 'false') { var signInURL = 'https://ictc.sharif.ir/c/portal/login?p_l_id=11144'; var modalSignInURL = Liferay.Util.addParams( 'windowState=exclusive', signInURL ); var setModalContent = function (html) { var modalBody = document.querySelector('.liferay-modal-body'); if (modalBody) { var fragment = document .createRange() .createContextualFragment(html); modalBody.innerHTML = ''; modalBody.appendChild(fragment); } }; var loading = false; var redirect = false; var html = ''; var modalOpen = false; var fetchModalSignIn = function () { if (loading || html) { return; } loading = true; Liferay.Util.fetch(modalSignInURL) .then(function (response) { return response.text(); }) .then(function (response) { if (!loading) { return; } loading = false; if (!response) { redirect = true; return; } html = response; if (modalOpen) { setModalContent(response); } }) .catch(function () { redirect = true; }); }; signInLink.addEventListener('mouseover', fetchModalSignIn); signInLink.addEventListener('focus', fetchModalSignIn); signInLink.addEventListener('click', function (event) { event.preventDefault(); if (redirect) { Liferay.Util.navigate(signInURL); return; } Liferay.Util.openModal({ bodyHTML: html ? html : '<span class="loading-animation">', height: '400px', onClose: function () { loading = false; redirect = false; html = ''; modalOpen = false; }, onOpen: function () { modalOpen = true; if (html && document.querySelector('.loading-animation')) { setModalContent(html); } }, size: 'md', title: '\u0648\u0631\u0648\u062f', }); }); } })(); // ]]> </script> </div> </li> <li class="d-none d-lg-inline-block"><a onclick="quick()" href="javascript:void(0)" class="sp-quick dropdown-toggle" data-toggle="dropdown" href="#"><i class="icon-menu"></i> </a> <ul class="sp-quick-dropdown dropdown-menu" role="menu"> </ul> </li> </ul> </div> </div> </div> </div> </section> <div class="container"> <div class="row"> <div class="col"> <div id="sp-menu-wrapper" class="hidden-xs"> <div id="sp-top-bar"> <div class="sp-main-menu"> <style> .sp-text-subsite { padding: 5px; top: -37px; } .sp-text-subsite-logo { color: #fff; font-style: normal; font-weight: 700; font-size: 1.07em; line-height: 20px; } .sp-header .sp-main-menu .navbar { padding-right: 25px !important; } @media (max-width:991px) { .sp-header .sp-logo-wrapper .sp-text-logo { display:none; } .sp-header .sp-text-subsite { top: -37px; position: relative; } .sp-header .sp-main-menu { margin: 0 4.143em 0 0; } .ltr .sp-header .sp-main-menu { margin: 0 0 0 4.143em; } .offcanvas-menu .sp-logo-wrapper .sp-text-logo { display:none; } .offcanvas-menu .sp-text-subsite { float:none !important; } } </style> <a href="./" id="sp-text-subsite" class="sp-text-subsite float-left"> <span class="sp-text-subsite-logo">مرکز فناوری اطلاعات و ارتباطات</span> </a> <script> var list, index; list = document.getElementsByClassName("sp-text-subsite"); for (index = 0; index < list.length; ++index) { list[index].setAttribute("href", "https://ictc.sharif.ir"); } </script> <nav class="navbar navbar-expand-lg navbar-dark p-0"> <!--div class="container"--> <div id="navbar" class="navbar-collapse collapse"> <ul class="nav navbar-nav p-0"> <li class="nav-item "> <a class="nav-link " href="https://ictc.sharif.ir/home" > صفحه اصلی </a> </li> <li class="nav-item position-static dropdown"> <a class="nav-link dropdown-toggle" href="JavaScript:Void(0);" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-angle-down"></i> درباره مرکز </a> <ul class="dropdown-menu" aria-labelledby="navbarDropdown"> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D9%85%D8%B1%DA%A9%D8%B2" role="menuitem"> معرفی مرکز </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D9%85%D8%B1%DA%A9%D8%B2-%D8%AF%D8%A7%D8%AF%D9%87-%D8%AF%D8%A7%D9%86%D8%B4%DA%AF%D8%A7%D9%87" role="menuitem"> مرکز داده دانشگاه </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%A2%DB%8C%DB%8C%D9%86-%D9%86%D8%A7%D9%85%D9%87-%D9%81%D9%86%D8%A7%D9%88%D8%B1%DB%8C-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA" role="menuitem"> آییننامه فناوری اطلاعات </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/colleagues" role="menuitem"> همکاران مرکز </a> </li> </ul> </li> <li class="nav-item position-static dropdown"> <a class="nav-link dropdown-toggle" href="JavaScript:Void(0);" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-angle-down"></i> خدمات </a> <ul class="dropdown-menu" aria-labelledby="navbarDropdown"> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B4%D9%86%D8%A7%D8%B3%D9%87-%D8%B4%D8%B1%DB%8C%D9%81-%D9%88-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA" role="menuitem"> شناسه شریف و اینترنت </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D9%BE%D8%B3%D8%AA-%D8%A7%D9%84%DA%A9%D8%AA%D8%B1%D9%88%D9%86%DB%8C%DA%A9" role="menuitem"> پست الکترونیکی </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%AF%D8%A7%D9%85%D9%86%D9%87-%D8%B4%D8%B1%DB%8C%D9%81" role="menuitem"> دامنه شریف </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D9%85%DB%8C%D8%B2%D8%A8%D8%A7%D9%86%DB%8C-%D9%88%D8%A8" role="menuitem"> میزبانی وب </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/vps-service" role="menuitem"> سرور مجازی اختصاصی (VPS) </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/colocation-service" role="menuitem"> فضای میزبانی سرور (Colocation) </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B3%D8%A7%D9%85%D8%A7%D9%86%D9%87-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4-%D8%B3%D8%B1%DB%8C%D8%B9-hpc" role="menuitem"> سامانه پردازش سریع (HPC) </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B3%D8%A7%D9%85%D8%A7%D9%86%D9%87-%D9%88%DB%8C%D8%B1%D8%A7%DB%8C%D8%B4%DA%AF%D8%B1-%D9%88-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4%DA%AF%D8%B1-%D8%A8%D8%B1%D8%AE%D8%B7-latex" role="menuitem"> سامانه ویرایشگر و پردازشگر برخط LaTex </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%AE%D8%AF%D9%85%D8%A7%D8%AA-%D8%B4%D8%A8%DA%A9%D9%87-%D9%88-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D8%B1%D9%88%DB%8C%D8%AF%D8%A7%D8%AF%D9%87%D8%A7" role="menuitem"> خدمات شبکه و اینترنت رویدادها </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%AE%D8%AF%D9%85%D8%A7%D8%AA-%D8%B3%D8%AE%D8%AA-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1%DB%8C" role="menuitem"> خدمات سخت افزاری </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%A2%D9%86%D8%AA%DB%8C-%D9%88%DB%8C%D8%B1%D9%88%D8%B3" role="menuitem"> آنتی ویروس </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF%D9%87%D8%A7%DB%8C-%D8%AD%D8%AC%DB%8C%D9%85" role="menuitem"> دانلودهای حجیم </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-ftp" role="menuitem"> سرویس FTP </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B3%D8%A7%D9%85%D8%A7%D9%86%D9%87-%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D9%BE%DB%8C%D8%A7%D9%85%DA%A9" role="menuitem"> سامانه ارسال پیامک </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://bw.ictc.sharif.edu" role="menuitem"> مشاهده و مدیریت ترافیک </a> </li> </ul> </li> <li class="nav-item "> <a class="nav-link " href="https://ictc.sharif.ir/%D8%B3%D8%A7%D9%85%D8%A7%D9%86%D9%87-%D9%87%D8%A7" > سامانهها </a> </li> <li class="nav-item "> <a class="nav-link " href="http://noc.sharif.ir/" > گزارش مشکل </a> </li> <li class="nav-item position-static dropdown"> <a class="nav-link dropdown-toggle" href="JavaScript:Void(0);" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-angle-down"></i> راهنماها </a> <ul class="dropdown-menu" aria-labelledby="navbarDropdown"> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%B4%D8%B1%DB%8C%D9%81%E2%80%8C%D9%85%D9%86" role="menuitem"> راهنمای شریفمن </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%B4%D9%86%D8%A7%D8%B3%D9%87-%D8%B4%D8%B1%DB%8C%D9%81-%D8%A7%D8%AD%D8%B1%D8%A7%D8%B2-%D9%87%D9%88%DB%8C%D8%AA-%DB%8C%DA%A9%D9%BE%D8%A7%D8%B1%DA%86%D9%87" role="menuitem"> راهنمای شناسه شریف و احراز هویت یکپارچه </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A8%D9%87-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA" role="menuitem"> راهنمای اتصال به اینترنت </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%B1%D8%A7%D9%87-%D8%AF%D9%88%D8%B1-%D8%A8%D9%87-%D8%B4%D8%A8%DA%A9%D9%87-%D8%AF%D8%A7%D9%86%D8%B4%DA%AF%D8%A7%D9%87" role="menuitem"> راهنمای اتصال راه دور به شبکه دانشگاه </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D9%BE%D8%B3%D8%AA-%D8%A7%D9%84%DA%A9%D8%AA%D8%B1%D9%88%D9%86%DB%8C%DA%A9%DB%8C" role="menuitem"> راهنمای پست الکترونیکی </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%AF%D8%A7%D9%85%D9%86%D9%87-%D8%B4%D8%B1%DB%8C%D9%81" role="menuitem"> راهنمای دامنه شریف </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D9%85%DB%8C%D8%B2%D8%A8%D8%A7%D9%86%DB%8C-%D9%88%D8%A8" role="menuitem"> راهنمای میزبانی وب </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%B3%D8%B1%D9%88%D8%B1-%D9%85%D8%AC%D8%A7%D8%B2%DB%8C-%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B5%DB%8C-vps" role="menuitem"> راهنمای سرور مجازی اختصاصی (VPS) </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D9%81%D8%B6%D8%A7%DB%8C-%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B5%DB%8C-%D8%B3%D8%B1%D9%88%D8%B1-colocation-" role="menuitem"> راهنمای فضای اختصاصی سرور (Colocation) </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%B3%D8%A7%D9%85%D8%A7%D9%86%D9%87-%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D8%B4-%D8%B3%D8%B1%DB%8C%D8%B9-hpc" role="menuitem"> راهنمای سامانه پردازش سریع (HPC) </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C-%D8%A2%D9%86%D8%AA%DB%8C-%D9%88%DB%8C%D8%B1%D9%88%D8%B3%E2%80%AC%E2%80%AC" role="menuitem"> راهنمای آنتی ویروس </a> </li> <li class="position-relative"> <a class="dropdown-item" href="https://ictc.sharif.ir/cas-development" role="menuitem"> راهنمای CAS Development </a> </li> </ul> </li> <li class="nav-item "> <a class="nav-link " href="https://ictc.sharif.ir/%D8%AA%D9%85%D8%A7%D8%B3-%D8%A8%D8%A7-%D9%85%D8%A7" > تماس با ما </a> </li> </ul> </div> <!--/div--> </nav> </div> <div class="sp-search"> <div class="sp-column text-center text-lg-right"> <a onclick="opensearch()"> <i class="fa fa-search"></i></a> <script> function opensearch() { var elements = document.getElementsByClassName('sp-search'); for(var i=0; i<elements.length; i++) { elements[i].classList.toggle('open'); } } var specifiedElement = document.querySelector(".sp-search"); document.addEventListener('click', function(event) { var isClickInside = specifiedElement.contains(event.target); if (isClickInside) { //console.log('You clicked inside') } else { specifiedElement.classList.remove("open"); //console.log('You clicked outside') } }); </script> <div class="portlet-boundary portlet-boundary_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_ portlet-static portlet-static-end portlet-barebone portlet-search-bar " id="p_p_id_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_"> <span id="p_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch"></span> <section class="portlet" id="portlet_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch"> <div class="portlet-content"> <div class=" portlet-content-container"> <div class="portlet-body"> <form action="https://ictc.sharif.ir/search" class="form " data-fm-namespace="_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_" id="_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_fm" method="get" name="_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_fm" > <input class="field form-control" id="_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_formDate" name="_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_formDate" type="hidden" value="1740502330892" /> <fieldset class="fieldset search-bar" ><div class=""> <input class="field search-bar-empty-search-input form-control" id="_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_emptySearchEnabled" name="_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_emptySearchEnabled" type="hidden" value="false" /> <div class="input-group search-bar-simple"> <div class="input-group-item search-bar-keywords-input-wrapper"> <input class="form-control input-group-inset input-group-inset-after search-bar-keywords-input" data-qa-id="searchInput" id="dkrk___q" name="q" placeholder="جستجو..." title="جستجو" type="text" value="" /> <input class="field form-control" id="_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_scope" name="_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_scope" type="hidden" value="" /> <div class="input-group-inset-item input-group-inset-item-after"> <button class="btn btn-monospaced btn-unstyled"type="submit" aria-label="ارسال" ><span class="inline-item"><svg class="lexicon-icon lexicon-icon-search" role="presentation" viewBox="0 0 512 512"><use xlink:href="https://ictc.sharif.ir/o/shu-theme/images/clay/icons.svg#search" /></svg></span></button> </div> </div> </div> </div></fieldset> </form> <script type="text/javascript"> // <![CDATA[ AUI().use('liferay-form', function(A) {(function() {var $ = AUI.$;var _ = AUI._; Liferay.Form.register( { id: '_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_fm' , fieldRules: [ ] , validateOnBlur: true } ); var onDestroyPortlet = function(event) { if (event.portletId === 'com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch') { delete Liferay.Form._INSTANCES['_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_fm']; } }; Liferay.on('destroyPortlet', onDestroyPortlet); Liferay.fire( '_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_formReady', { formName: '_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_fm' } ); })();}); // ]]> </script> <script type="text/javascript"> // <![CDATA[ AUI().use('liferay-search-bar', function(A) {(function() {var $ = AUI.$;var _ = AUI._; new Liferay.Search.SearchBar(A.one('#_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_fm')); })();}); // ]]> </script> </div> </div> </div> </section> </div> </div> </div> </div> </div> </div> </div> </div> </header> <section id="content"> <div class="layout-content portlet-layout" id="main-content" role="main"> <div class=" mb-lg-0 ml-lg-0 mr-lg-0 mt-lg-0 pb-lg-0 pl-lg-0 pr-lg-0 pt-lg-0" style="box-sizing: border-box;border-style: solid; border-width: 0px;opacity: 1.0;overflow: hidden;"> <div class="container-fluid p-0"> <div class="row align-items-lg-start align-items-sm-start align-items-start align-items-md-start flex-lg-row flex-sm-row flex-row flex-md-row"> <div class="col col-lg-2 col-sm-2 col-2 col-md-2"> </div> <div class="col col-lg-8 col-sm-8 col-8 col-md-8"> <div class=""> <div class=" mb-lg-0 ml-lg-0 mr-lg-0 mt-lg-0 pb-lg-1 pl-lg-10 pr-lg-10 pt-lg-1 text-left pr-sm-10 pb-sm-1 pt-sm-1 pl-sm-10 pr-10 pb-1 pt-1 pl-10 pr-md-10 pb-md-1 pt-md-1 pl-md-10" style="box-sizing: border-box;border-style: solid; border-width: 0px;opacity: 1.0;"> <div id="fragment-0-aehz" > <div class="portlet-boundary portlet-boundary_com_liferay_knowledge_base_web_portlet_DisplayPortlet_ portlet-static portlet-static-end portlet-barebone knowledge-base-portlet knowledge-base-portlet-display " id="p_p_id_com_liferay_knowledge_base_web_portlet_DisplayPortlet_"> <span id="p_com_liferay_knowledge_base_web_portlet_DisplayPortlet"></span> <section class="portlet" id="portlet_com_liferay_knowledge_base_web_portlet_DisplayPortlet"> <div class="portlet-content"> <div class=" portlet-content-container"> <div class="portlet-body"> <div class="row"> <div class="col-md-12"> <div id="_com_liferay_knowledge_base_web_portlet_DisplayPortlet_message-container"></div> <div class="kb-article-container"> <div> <div class="sidenav-content"> <div class="taglib-header "> <h3 class="header-title"> <span> راهنمای CAS Development </span> </h3> </div> <div class="kb-tools"> <div class="kb-article-tools"> <span class=""> <a href="https://ictc.sharif.ir/cas-development?p_p_id=com_liferay_knowledge_base_web_portlet_DisplayPortlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=kbArticleRSS&p_p_cacheability=cacheLevelPage&_com_liferay_knowledge_base_web_portlet_DisplayPortlet_resourceClassNameId=31001&_com_liferay_knowledge_base_web_portlet_DisplayPortlet_resourcePrimKey=7048604" target="_blank" class=" lfr-icon-item taglib-icon" id="_com_liferay_knowledge_base_web_portlet_DisplayPortlet_rjus____"> <span class="taglib-text ">منابع خبری</span> <svg class="lexicon-icon lexicon-icon-shortcut" focusable="false" role="img"><use href="https://ictc.sharif.ir/o/shu-theme/images/clay/icons.svg#shortcut" /><span class="sr-only">(نمایش در پنجرهی جدید)</span><title>(نمایش در پنجرهی جدید)</title></svg></a> </span> <span class=""> <a href="https://ictc.sharif.ir/cas-development?p_p_id=com_liferay_knowledge_base_web_portlet_DisplayPortlet&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&_com_liferay_knowledge_base_web_portlet_DisplayPortlet_redirect=https%3A%2F%2Fictc.sharif.ir%2Fcas-development%3Fp_p_id%3Dcom_liferay_knowledge_base_web_portlet_DisplayPortlet%26p_p_lifecycle%3D0%26p_p_state%3Dnormal%26p_p_mode%3Dview&_com_liferay_knowledge_base_web_portlet_DisplayPortlet_mvcPath=%2Fdisplay%2Fhistory.jsp&_com_liferay_knowledge_base_web_portlet_DisplayPortlet_resourceClassNameId=31001&_com_liferay_knowledge_base_web_portlet_DisplayPortlet_resourcePrimKey=7048604&_com_liferay_knowledge_base_web_portlet_DisplayPortlet_status=0" target="_self" class=" lfr-icon-item taglib-icon" id="_com_liferay_knowledge_base_web_portlet_DisplayPortlet_ctvk____"> <span id="qfkd____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-document" focusable="false"><use href="https://ictc.sharif.ir/o/shu-theme/images/clay/icons.svg#document"></use></svg></span> <span class="taglib-text ">تاریخچه</span> </a> </span> <span class=""> <a href="javascript:var printKBArticleWindow = window.open('https://ictc.sharif.ir/cas-development?p_p_id=com_liferay_knowledge_base_web_portlet_DisplayPortlet&p_p_lifecycle=0&p_p_state=pop_up&p_p_mode=view&_com_liferay_knowledge_base_web_portlet_DisplayPortlet_mvcPath=%2Fdisplay%2Fprint_article.jsp&_com_liferay_knowledge_base_web_portlet_DisplayPortlet_resourceClassNameId=31001&_com_liferay_knowledge_base_web_portlet_DisplayPortlet_resourcePrimKey=7048604&_com_liferay_knowledge_base_web_portlet_DisplayPortlet_status=0', 'printKBArticle', 'directories=no,height=640,location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no,width=680'); void(''); printKBArticleWindow.focus();" target="_self" class=" lfr-icon-item taglib-icon" id="_com_liferay_knowledge_base_web_portlet_DisplayPortlet_suxb____"> <span id="jbfs____"><svg aria-hidden="true" class="lexicon-icon lexicon-icon-print" focusable="false"><use href="https://ictc.sharif.ir/o/shu-theme/images/clay/icons.svg#print"></use></svg></span> <span class="taglib-text ">چاپ</span> </a> </span> </div> </div> <div> <div class="kb-entity-body "> <div id="_com_liferay_knowledge_base_web_portlet_DisplayPortlet_7048604"> <ul> <li> <a href="#1">۱ معرفی</a></li> <li> <a href="#2">پروتکل CAS</a></li> <li> <a href="#3">۳ <b>کارکرد CAS</b></a> <ul> <li> <a href="#4">۳.۱ مرورگر کاربر</a></li> <li> <a href="#5">۳.۲ نرمافزار تحت وب</a></li> <li> <a href="#6">۳.۳ سرور SSO با پشتیبانی از CAS</a></li> </ul> </li> <li> <a href="#7">۴ <b>نحوه اتصال با CAS</b></a> <ul> <li> <a href="#8">۴.۱ Initial request (مرحله یک)</a></li> <li> <a href="#9">۴.۲ هدایت به صفحه ورود CAS (مرحله دو)</a></li> <li> <a href="#10">۴.۳ بررسی TGT در مرورگر (مرحله سه)</a></li> <li> <a href="#11">۴.۴ ارسال صفحه ورود به مرورگر توسط CAS (مرحله چهار)</a></li> <li> <a href="#12">۴.۵ ارسال اطلاعات ورود به سرویس CAS (مرحله پنج)</a></li> <li> <a href="#13">۴.۶ برگشت کاربر به صفحه نرمافزار (مرحله شش)</a></li> <li> <a href="#14">۴.۷ درخواست مجدد مرورگر برای اتصال به نرمافزار بهمراه CAS service ticket (مرحله هفت)</a></li> <li> <a href="#15">۴.۸ چک صحت CAS service ticket (مرحله هشت)</a></li> <li> <a href="#16">۴.۹ جواب سرویس CAS به چک صحت ticket (مرحله نه)</a></li> <li> <a href="#17">۴.۱۰ ارسال صفحه نرمافزار (مرحله ده)</a></li> <li> <a href="#18">۴.۱۱ تنظیمات CAS client</a></li> </ul> </li> <li> <a href="#19">۵ <b>نحوه اتصال با RESTful</b></a> <ul> <li> <a href="#20">۵.۱ درخواست یک TGT</a></li> <li> <a href="#21">۵.۲ JWT Ticket Granting Tickets</a></li> <li> <a href="#22">۵.۳ درخواست یک Service Ticket</a></li> <li> <a href="#23">۵.۴ اعتبار سنجی Service Ticket</a></li> <li> <a href="#24">۵.۵ وضعیت تیکت</a></li> <li> <a href="#25">۵.۶ متود users</a></li> </ul> </li> <li> <a href="#26">۶ یکبار خروج (SLO)</a> <ul> <li> <a href="#27">۶.۱ <b>عملیات خروج</b></a></li> <li> <a href="#28">۶.۲ CAS Logout</a></li> <li> <a href="#29">۶.۳ روشهای SLO</a> <ul> <li> <a href="#30">۶.۳.۱ Back Channel</a></li> <li> <a href="#31">۶.۳.۲ Front Channel</a></li> </ul> </li> <li> <a href="#32">۶.۴ درخواست SLO</a></li> <li> <a href="#33">۶.۵ تعریف Endpoint برای نشستهای مشترک چند محصول</a></li> <li> <a href="#34">۶.۶ SSO Session vs. Application Session</a></li> </ul> </li> <li> <a href="#31">۷ صحت اتصال سامانهها به SSO</a> <ul> <li> <a href="#32">۷.۱ مدیریت نشست کاربران</a></li> <li> <a href="#33">۷.۲ نقش کلید مشترک در تشکیل نشست</a></li> <li> <a href="#34">۷.۳ نگهداری تیکت ST برای هر کاربر</a></li> <li> <a href="#35">۷.۴ ورود خودکار کاربران شناسایی شده در SSO</a></li> <li> <a href="#36">۷.۵ مفهوم و صحت کارکرد SLO</a></li> </ul> </li> </ul> <h1> <a href="#" id="1" name="1">معرفی</a></h1> <p>امروزه تعدد سامانههای نرمافزاری مختلف برای کاربران یک مشکل بزرگ ایجاد کرده است. هر کاربر میبایست نامهای کاربری و رمزهای عبور مختلفی را به خاطر بسپارد و از آنها جهت ورود استفاده کند. اکثر سامانههای نرمافزاری نیز برای سهولت از بانک اطلاعاتی خود جهت مدیریت کاربران استفاده میکنند. این امر باعث میشود تا اطلاعات کاربران بارها در سامانههای مختلف تکرار شود و حتی بعضا به علت تعدد تکرار به صورت اشتباه هم وارد شود.</p> <p>بسیاری از سازمانها جهت حل این مشکل از سرویسهایی بر پایه LDAP استفاده میکنند تا هویت کاربران یکپارچه شود و از تعدد نام کاربری و رمز عبور جلوگیری شود. کارکرد این سرویس نیازمند اتصال همه سامانههای نرمافزاری به پروتکل LDAP جهت احراز هویت هست. اگر چه مشکل تعدد نام کاربری حل میشود اما مشکل دیگری ایجاد میشود. تصور کنید که یک کاربر روزانه به ۱۰ سامانه نرمافزاری مختلف میخواهد متصل شود و رمز کاربر نیز پیچیده باشد. کاربر حداقل ۱۰ بار باید نام کاربری و رمز عبور خود را وارد کند تا بتواند از این سامانهها استفاده کند. اگر این مقدار را با تعداد کابران محاسبه کنیم به حجم بسیار بالایی از ورود خواهیم رسید.</p> <p>جهت سهولت در ورود و خروج کاربران از سامانههای مختلف و حل مشکل فوق، از سرویسهای SSO یا یکبار ورود استفاده میشود. این سرویسها پروتکلهای مختلفی را اصولاً پوشش میدهند که شامل CAS, OAuth2, SAML و یا بصورت وبسرویس Restful خواهد بود. سامانهها در صورتی که بر روی یک پروتکل مشترک احراز هویت را انجام دهند توسط Ticket صادره از سرویس SSO میتوانند اعتبار ورود کاربر را بررسی نموده و در صورتی که ticket مربوطه هنوز معتبر باشد امکان و اجازه ورود کاربر را بدون وارد نمودن نام کاربر و رمز عبور بدهند. در هنگام خروج یک کاربر از یک سامانه نیز با استفاده از SLO یا یکبار خروج و اعلام آن به سرویس SSO میتوان ticket مربوطه را بیاعتبار کرد و دسترسی کاربر از همه سامانهها به جهت امنیت قطع خواهد شد.</p> <p>در ادامه به نحوه چگونگی اتصال و اعتبارسنجی این سرویس میپردازیم.</p> <h1> <a href="#" id="2" name="2"><b>پروتکل CAS</b></a></h1> <p>یکی از پروتکلهایی که برای تکنولوژی SSO استفاده میگردد، CAS نام دارد که مخفف Central Authentication Service هست. این پروتکل توسط شرکت Apereo ابداع شده است و برای زبانهای مختلف برنامهنویسی کتابخانه داشته و استفاده از آن سهولت زیادی نسبت به سایر پروتکلها دارد که دلیل آن کتابخانههای خوبی هست که در سمت سرویسگیرنده فراهم شده است. کتابخانههای CAS محدود به زبانهای برنامهنویسی نیستند و در وبسرورهایی مانند Apache نیز این کتابخانهها وجود دارند که به نام mod_auth_cas شناخته میشود و یا حتی در سیستمعامل لینوکس برای PAM نیز کتابخانه pam_cas وجود دارد.</p> <p>برای دریافت این کتابخانهها بسته به نوع زبان میتوان از مسیر کلی <a href="https://github.com/apereo" rel="nofollow">https://github.com/apereo</a> استفاده نمود. یا به عنوان نمونه طبق جدول زیر میتوان کتابخانهها را دریافت نمود. مستندات کامل هر کتابخانه نیز در آدرس مربوطه وجود دارد.</p> <p> </p> <table align="center"> <thead> <tr> <th scope="col">زبان برنامهنویسی</th> <th scope="col">دریافت کتابخانه سمت Client</th> </tr> </thead> <tbody> <tr> <td>Java</td> <td><a href="https://github.com/apereo/java-cas-client" rel="nofollow">https://github.com/apereo/java-cas-client</a></td> </tr> <tr> <td>Net.</td> <td><a href="https://github.com/TheHokieCoder/dotnet-cas-client" rel="nofollow">https://github.com/TheHokieCoder/dotnet-cas-client</a></td> </tr> <tr> <td>PHP</td> <td><a href="https://github.com/apereo/phpCAS" rel="nofollow">https://github.com/apereo/phpCAS</a></td> </tr> <tr> <td>Python</td> <td><a href="https://github.com/python-cas/python-cas" rel="nofollow">https://github.com/python-cas/python-cas</a></td> </tr> </tbody> </table> <p>همچنین لازم به ذکر است که بسیاری از برنامههای متنباز مانند Drupal, Mediawiki و … بصورت پیشفرض از مدل احراز هویت مبتنی بر CAS استفاده میکنند و تنها تنظیماتی که در ادامه این سند ذکر میشود برای کارکرد آنها کفایت میکند.</p> <p> <b>نکته</b> <br> جهت دریافت مشخصههای بازگشتی از سمت سامانه SSO برای کاربر، حتما باید از نسخه ۳ پروتکل CAS استفاده کنید. این قابلیت در فایل تنظیمات وجود دارد و در بعضی از کتابخانهها ممکن است بصورت پیشفرض بر روی نسخه ۲ تنظیم شده باشد. این مقدار اصولا به شکل یک constant تعریف شده است.</p> <h1> <a href="#" id="3" name="3"><b>کارکرد CAS</b></a></h1> <p>در اینجا به نحوه کارکرد CAS میپردازیم. در ابتدا اشاره به این نکته ضروری است که سرویس SSO ممکن است به همه برنامهها دسترسی بدهد یا آن را محدود به آدرسهای خاصی کند. بر روی سرویس SSO که در اینجا گفته شده است، دسترسی به آدرسهای مشخصی محدود شده است. بنابراین اگر با خطای زیر مواجه شدید یعنی اینکه دسترسی برای شما برای service URL درخواست شده امکانپذیر نیست. در ادامه توضیحات بیشتری در مورد service URL ذکر خواهد شد.</p> <p> </p> <p> <img alt="" height="200" src="https://ictc.sharif.edu/documents/109144/0/895px-CAS.jpg/c99933ab-3d04-b723-cc44-5f8c5db725d6?t=1638127846561&imagePreview=1" width="1193"></p> <p></p> <p> </p> <p> <br> </p> <p>در سمت سرویس مدیریت CAS دو نوع دسترسی اصولاً تعریف میشود. اول دسترسی اتصال به سرویس SSO و دوم هم سایر پارامترها و اطلاعاتی که از سمت این سرویس در مورد کاربر به درخواست کننده برگشت داده میشود.</p> <p>در سرویس CAS سه قسمت اصلی وجود دارد:</p> <ol> <li>مرورگر کاربر</li> <li>نرمافزار تحت وب</li> <li>سرور SSO با پشتیبانی از CAS</li> </ol> <h3> <a href="#" id="4" name="4">مرورگر کاربر</a></h3> <p>مرورگر کاربر نقش ارتباطی از سمت کاربر را بر عهده دارد و ticket دریافت شده از سمت SSO در مرورگر کاربر ذخیره میشود و میتواند توسط سایر نرمافزارهای سازمان که به SSO متصل هستند، از این ticket جهت اعتبارسنجی نشست فعلی استفاده شود.</p> <p> </p> <h3> <a href="#" id="5" name="5">نرمافزار تحت وب</a></h3> <p>این نرمافزار به عنوان یک CAS client تنظیم شده و برای احراز هویت کاربر در صورت عدم وجود ticket در مرورگر به آدرس مشخصی هدایت میشود که بعد از ورود صحیح، کاربر مجدداً به صفحه مشخص شده توسط نرمافزار ارجاع داده میشود. (تقریباً مشابه آنچیزی که در زمان استفاده از کاربر گوگل برای احراز هویت در سایتهای دیگر مشاهده میکنیم)</p> <p> </p> <h3> <a href="#" id="6" name="6">سرور SSO با پشتیبانی از CAS</a></h3> <p>این سرویس از قسمتهای ذیل تشکیل شده است که به تکمیل این فرآیند کمک میکند:</p> <ol> <li>ارائه خدمات صفحه ورود و احراز هویت کاربر از یک منبع واحد (دیتابیس، LDAP و غیره)</li> <li>صدور کوکی TG <sup id="cite_ref-1"> <a href="https://ictc.sharif.edu/group/ictc/~/control_panel/manage?p_p_id=com_liferay_wiki_web_portlet_WikiAdminPortlet&p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view&_com_liferay_wiki_web_portlet_WikiAdminPortlet_mvcRenderCommandName=%2Fwiki%2Fview&_com_liferay_wiki_web_portlet_WikiAdminPortlet_redirect=https%3A%2F%2Fictc.sharif.edu%2Fgroup%2Fictc%2F~%2Fcontrol_panel%2Fmanage%3Fp_p_id%3Dcom_liferay_wiki_web_portlet_WikiAdminPortlet%26p_p_lifecycle%3D0%26p_p_state%3Dmaximized%26p_p_mode%3Dview%26_com_liferay_wiki_web_portlet_WikiAdminPortlet_redirect%3Dhttps%253A%252F%252Fictc.sharif.edu%252Fgroup%252Fictc%252F%257E%252Fcontrol_panel%252Fmanage%253Fp_p_id%253Dcom_liferay_wiki_web_portlet_WikiAdminPortlet%2526p_p_lifecycle%253D0%2526p_p_state%253Dmaximized%2526p_p_mode%253Dview%26_com_liferay_wiki_web_portlet_WikiAdminPortlet_mvcRenderCommandName%3D%252Fwiki%252Fview_pages%26_com_liferay_wiki_web_portlet_WikiAdminPortlet_navigation%3Dall-pages%26_com_liferay_wiki_web_portlet_WikiAdminPortlet_nodeId%3D2510842&_com_liferay_wiki_web_portlet_WikiAdminPortlet_nodeName=CAS%20Development&_com_liferay_wiki_web_portlet_WikiAdminPortlet_title=FrontPage%20(11.21.22%208.00%20AM)%20(11.21.22%208.00%20AM)%20(11.21.22%208.00%20AM)#cite_note-1">[۱]</a></sup>جهت عدم نیاز به ورود مجدد کاربر در موارد بعدی که به سمت سرور CAS هدایت میشود (هر نرمافزار جهت کنترل اعتبار ورود کاربر، مرورگر را به سمت آدرس وب سرویس CAS هدایت میکند و در صورتی که تیکت کاربر معتبر باشد، مجدداً از سمت CAS کاربر به سامانه اصلی هدایت میشود. لذا در این فرآیند کاربری که قبلاً وارد شده است نیازی به ورود مجدد ندارد و متوجه این امر نخواهد شد و این همان سهولتی هست که در کنار امنیت برای کاربر به ارمغان میآید)</li> <li>امکان هدایت و برگشت به نرمافزار تحت وب با تنظیم ticket=ST-XXX در url مربوطه برای اینکه به عنوان CAS client بتواند تیکت را بررسی کند</li> <li>اعتبارسنجی تیکت صادر شده توسط کتابخانه CAS برای اطمینان نرمافزار از صحت ورود کاربر و اعتبار تیکت آن</li> </ol> <h1> <a href="#" name="7"><b>نحوه اتصال با CAS</b></a></h1> <p>در شکل ذیل نحوه اتصال به سرویس CAS مشاهده میشود تا بتوانیم بهتر فرآیند آن را درک کنیم.</p> <p> </p> <p style="text-align: center;"> <a><img alt="CAS2.jpg" height="500" src="https://ictc.sharif.edu/documents/109144/0/776px-CAS2+%281%29.jpg/1cba8b13-28f7-20be-238c-386139c6b8ea?t=1638162636506&imagePreview=1" width="776"></a></p> <p></p> <p> </p> <p>برای مشاهده دیاگرامهای دقیقتر و بهمراه کدهای HTTP مربوطه میتوان به لینک زیر مراجعه کرد:</p> <p> <a href="https://apereo.github.io/cas/5.2.x/protocol/CAS-Protocol.html" rel="nofollow">https://apereo.github.io/cas/5.2.x/protocol/CAS-Protocol.html</a></p> <p> </p> <h2> <a href="#" name="8">Initial request (مرحله یک)</a></h2> <ol> <li>نرمافزار sampleapp به عنوان CAS client تنظیم شده است تا مثلاً روی آدرس test/ احراز هویت را انجام دهد.</li> <li>کاربر از طریق مرورگر به test/ متصل میشود.</li> <li>اگر مرورگر در حال حاضر بر روی نرمافزار sampleapp هیچ نشستی نداشته باشد، sampleapp کنترل را بدست کتابخانه CAS میدهد.</li> <li>اگر کتابخانه CAS پارامتر تیکت را در درخواست مشاهده نکند، کاربر را به صفحه ورود CAS هدایت میکند و در انتهای آن عبارت service=url_to_return_to را اضافه میکند که این مقدار برابر آدرسی هست که قرار هست بعد از ورود صحیح، کاربر مجدداً به سمت آن هدایت شود.در مثال مد نظر ما مثلاً آدرس <a href="http://localhost:8080/sampleapp/test" rel="nofollow">http://localhost:8080/sampleapp/test</a> خواهد بود که url نهایی به شکل ذیل هست:</li> </ol> <p style="text-align: left;"> <a href="https://accounts.example.com/cas/login?service=http://localhost:8080/sampleapp/test" rel="nofollow">https://accounts.example.com/cas/login?service=http://localhost:8080/sampleapp/test</a> </p> <p>اگر این آدرس <a href="http://localhost:8080/sampleapp/test" rel="nofollow">http://localhost:8080/sampleapp/test</a> در سیستم مدیریت CAS به عنوان آدرس مجاز تعریف نشده باشد پیام Application Not Authorized to Use CAS دیده میشود. لذا حتماً بایستی آدرس مد نظر نرمافزار خود را به مدیر سیستم اعلام کنید تا در سرویس CAS تعریف شده و دسترسی شما مجاز باشد.</p> <h2> <a href="#" name="9">هدایت به صفحه ورود CAS (مرحله دو)</a></h2> <ol> <li>کاربر به صفحه ورود CAS جهت احراز هویت انتقال داده میشود. فرم ورود مربوط به صفحه CAS روی مرورگر کاربر نمایش داده خواهد شد.</li> <li>در این مرحله کاربر میبایست نام کاربری و رمز عبور خود را واردکند. در سمت راست صفحه نیز نام و توضیحات برنامهای که کاربر از آن به سمت صفحه ورود هدایت شده است نمایش داده میشود. مانند تصویر زیر: <p>در تصویر فوق ما از نرمافزاری با عنوان CAS Management به این صفحه هدایت شدهایم. این موارد توسط مدیر سیستم به عنوان نام و توضیحات نرمافزار مجاز تعریف شده، تعیین میشود.</p> </li> </ol> <p style="text-align: center;"> <img alt="تصویر صفحه ورود اصلی کاربران" height="400" src="https://ictc.sharif.edu/documents/109144/0/300px-Sso-main-login+%282%29.png/ce654e01-d182-7b97-4a72-a2220add3b3f?t=1638167117235&imagePreview=1" width="433"></p> <p style="text-align: center;"> تصویر صفحه ورود اصلی کاربران</p> <p> </p> <h2> <a href="#" name="10">بررسی TGT در مرورگر (مرحله سه)</a></h2> <ul> <li>در این مرحله مقدار CASTGC cookie که در سمت سرور با نام TGT تولید شده است چک میشود. اگر چنین مقداری در مرورگر در همان لحظه وجود داشته باشد، یعنی اینکه کاربر توسط CAS قبلاً احراز هویت شده است و از اینجا به مرحله شش خواهد رفت و به نرمافزار مجاز با مشخص نمودن مقدار service ticket برگشت داده خواهد شد.</li> <li>اگر هیچ CASTGC وجود نداشته باشد، صفحه ورود CAS در مرورگر نمایش داده خواهد شد.</li> </ul> <h2> <a href="#" name="11">ارسال صفحه ورود به مرورگر توسط CAS (مرحله چهار)</a></h2> <p>یکی از خوبیهای این قسمت این مسأله هست که برنامهها نیازی به نمایش صفحه ورود به کاربرها ندارند و همه نرمافزارهای سازمان از یک صفحه ورود یکسان استفاده میکنند. مشابه آنچه در سیستم SSO گوگل با آدرس <a href="https://accounts.google.com/" rel="nofollow">https://accounts.google.com</a> مشاهده میکنید.</p> <ul> <li>عدم نیاز به مدیریت صفحه ورود توسط هر نرمافزار</li> <li>عدم نیاز به اتصال به سیستمهای بانک اطلاعاتی و یا LDAP و غیره جهت احراز هویت توسط هر نرمافزار</li> <li>عدم اطلاع از رمز عبور کاربر توسط هر نرمافزار. رمز وارد شده توسط کاربر فقط در اختیار مرورگر و سرویس CAS هست که امنیت بالاتری را خواهد داشت</li> </ul> <h2> <a href="#" name="12">ارسال اطلاعات ورود به سرویس CAS (مرحله پنج)</a></h2> <ul> <li>سرویس CAS اطلاعاتی که با متود POST توسط مرورگر به آن ارسال شده است را چک میکند و اگر احراز هویت انجام نشود مجدداً صفحه ورود را به کاربر نشان میدهد.</li> <li>تعداد کمی احراز هویت اشتباه در زمان کوتاه باعث قف شدن کاربر میشود و سایر احراز هویتهای بعدی تا ۱۵ دقیقه بدون موفقیت خواهد بود تا از حملات تحت وب جلوگیری شود.</li> </ul> <h2> <a href="#" name="13">برگشت کاربر به صفحه نرمافزار (مرحله شش)</a></h2> <ul> <li>یک ticket granting ticket که به آن TGT میگوییم و به عنوان نمونه مشابه رشته ذیل هست توسط سرویس CAS سمت سرور ذخیره خواهد شد و روی مرورگر نیز یک کوکی با نام CASTGC تنظیم میشود.</li> </ul> <p>TGT-1-wKQjkOhweJE6MMTNCqTwv6WojMDBL61GISejnyCfigrMFCumYu-accounts.example.com</p> <ul> <li>یک service ticket صادر میشود و به عنوان یک پارامتر به آدرس نرمافزار ارائه شده در زمان هدایت به CAS برگشت داده میشود. (در مرحله یک توضیح داده شده است) این تیکت مشابه زیر خواهد بود. در این مثال فرض شده است که آدرس نرمافزار ما <a href="http://localhost:8080/sampleapp/test" rel="nofollow">http://localhost:8080/sampleapp/test</a> هست:</li> </ul> <p>ST-1-bdgbwHIReBonmaudvxJl-accounts.example.com</p> <h2> <a href="#" name="14">درخواست مجدد مرورگر برای اتصال به نرمافزار بهمراه CAS service ticket (مرحله هفت)</a></h2> <ul> <li>در حال حاضر هنوز نشست نرمافزار کامل برقرار نشده است. در این مرحله کتابخانه CAS وارد عمل کنترل میشود.</li> <li>کتابخانه CAS پارامتر تیکت را در url مشاهده میکند و میتواند آن را با سرویس CAS چک کند.</li> <li>CAS service ticket تنها یکبار معتبر خواهد بود و کتابخانه CAS میتواند از آن ظرف ۱۰ ثانیه استفاده کند و صحت آن را چک کند یا اینکه آن expire خواهد شد و عملیات مرحله شش دوباره میبایست انجام شود.</li> </ul> <h2> <a href="#" name="15">چک صحت CAS service ticket (مرحله هشت)</a></h2> <ul> <li>کتابخانه CAS برای چک کردن تیکت آماده میشود و درخواست زیر را به عنوان نمونه بر حسب آدرس نرمافزار ارسال میکند:</li> </ul> <p> </p> <p>https://accounts.example.com/cas/p3/serviceValidate?ticket=ST-1-bdgbwHIReBonmaudvxJl-counts.example.com&service=http%3A%2F%2Flocalhost%3A8080%2Fsampleapp%2Ftest%2F </p> <p> </p> <p>در صورتی که این تیکت از سمت سرور CAS تأیید شود، کد ۲۰۰ به سمت مرورگر برگشت داده میشود.</p> <h2> <a href="#" name="16">جواب سرویس CAS به چک صحت ticket (مرحله نه)</a></h2> <ul> <li>در ذیل یک نمونه جواب CAS را مشاهده میکنیم. به مقادیر برگشت داده شده مانند email, lastname, firstname و غیره در تگ cas:attributes توجه کنید. اینها همان پارامترهایی از کاربر هستند که به نرمافزار مربوطه مجوز مشاهده آنها داده شده است. لذا بسته به نیاز هر برنامه میبایست به مدیر سیستم درخواست دهید تا پارامترهای مورد نیاز را در سمت سیستم مدیریت CAS تعریف کند. جهت برگشت خروجی بصورت json میتوانید پارامتر format=json را به انتهای آدرس به عنوان پارامتر GET اضافه کنید.</li> </ul> <p style="text-align: left;"> <code><'cas:serviceResponse xmlns:cas = ' http://www.yale.edu/tp/cas ><br> <cas:authenticationSuccess><br> <cas:user> mohsen </cas:user><br> <cas:attributes><br> <cas:email> ali@mbs.co.ir </cas:email><br> <cas:lastname> Ahmadi </cas:lastname><br> <cas:firstname> Ali </cas:firstname><br> <cas:fullname> Ali Ahmadi </cas:fullname><br> <cas:uid> 1001 </cas:uid><br> </cas:attributes><br> </cas:authenticationSuccess><br> </cas:serviceResponse></code></p> <h2> <a href="#" name="17">ارسال صفحه نرمافزار (مرحله ده)</a></h2> <ul> <li>در این مرحله کاربر به صفحه نهایی هدایت میشود و میتواند از نرمافزار sampleapp استفاده کند.</li> </ul> <h2> <a href="#" name="18">تنظیمات CAS client</a></h2> <p>در کتابخانههای زبانهایی که برنامه CAS client را دارند، فایل تنظیماتی بسته به نوع زبان وجود دارد که آدرس سرویسدهنده و سایر پارامترهای مربوطه را میتوان در آن تنظیم نمود. جهت این مسأله به مستندات کتابخانه CAS مربوطه میتوان رجوع کرد. در زمان ارتباط با سرویس CAS اطلاعات مربوط به اتصال و آدرس آن توسط مدیر سیستم در اختیار شما قرار خواهد گرفت.</p> <p> </p> <h1> <a href="#" name="19"><b>نحوه اتصال با RESTful</b></a></h1> <p>پروتکل REST این امکان را به سایر برنامه ها می دهد که به جای استفاده از پروتکلهای مورد پشتیبانی از وب سرویس با متود RESTful جهت ارتباط با سرویس SSO بهره بگیرند. این مسئله برای برنامکهای بر روی گوشیهای هوشمند هم مهم و حائز اهمیت هست.</p> <p>در ذیل نحوه تعامل با این وب سرویس آورده شده است. بدیهی هست که آدرس دامنه سرویس دهنده هم باید لحاظ شود.</p> <h2> <a href="#" name="20">درخواست یک TGT</a></h2> <p style="text-align: left;">POST /cas/v1/tickets HTTP/1.0</p> <p style="text-align: left;">username=a.ahmadi&password=password&additionalParam1=paramvalue</p> <p style="text-align: left;"> <b>پاسخ موفق</b></p> <p style="text-align: left;">201 Created<br> Location: http://accounts.mbsco.ir/cas/v1/tickets/{TGT id}</p> <p style="text-align: left;"> <b>پاسخ ناموفق</b></p> <p>اگر اطلاعات احراز هویت صحیح نباشد، CAS با خطای 400 پاسخ می دهد و اگر درخواست به گونهای ارسال شود که پشتیبانی نشود با خطای 415 پاسخ خواهد داد.</p> <h2> <a href="#" name="21">JWT Ticket Granting Tickets</a></h2> <p>TGT ای که توسط پروتکل REST ایجاد شده به عنوان JWT هم میتواند صادر شود. البته این قابلیت بایستی از سمت سرویس دهنده SSO فعال گردد و طبق سیاست سازمان انجام خواهد شد.</p> <p>برای درخواست اعطای TGT به عنوان JWT بعدی ، مطمئن شوید که درخواست POST با موارد زیر مطابقت دارد. به گزینه token=true توجه کنید.</p> <p style="text-align: left;">POST /cas/v1/tickets HTTP/1.0</p> <p style="text-align: left;">username=battags&password=password&token=true&additionalParam1=paramvalue</p> <p>پارامتر توکن به عنوان پارامتر درخواست یا یک هدر درخواست ارسال می شود. قسمت پاسخ شامل TGT به عنوان یک JWT خواهد بود. توجه داشته باشید که JWT ارسال شده، امضاء و رمزگذاری شده است.</p> <h2> <a href="#" name="22">درخواست یک Service Ticket</a></h2> <p>برای درخواست یک تیکت ST باید درخواستی با فرمت زیر ارسال کنید.</p> <p style="text-align: left;">POST /cas/v1/tickets/{TGT id} HTTP/1.0</p> <p style="text-align: left;">service={form encoded parameter for the service url}</p> <p> <b>پاسخ موفق</b> اگر پاسخ موفقی دریافت کنید مطابق با الگوی زیر خواهد بود.</p> <p style="text-align: left;">200 OK<br> ST-1-FFDFHDSJKHSDFJKSDHFJKRUEYREWUIFSD2132</p> <h2> <a href="#" name="23">اعتبار سنجی Service Ticket</a></h2> <p>اعتبار سنجی Service Ticket از طریق پروتکل CAS و با استفاده از آدرس p3/ServiceValidate/ استفاده میشود.</p> <p style="text-align: left;">GET /cas/p3/serviceValidate?service={service url}&ticket={service ticket}</p> <p> <b>پاسخ ناموفق</b></p> <p>CAS یک خطای 400 Bad Request ارسال می کند. اگر هم یک نوع درخواست نادرست ارسال شود خطای 415 Unsupported Media Type ارسال می کند.</p> <p> <b>logout</b></p> <p>با حذف تیکت صادر شده، نشست SSO پایان می یابد.</p> <p style="text-align: left;">DELETE /cas/v1/tickets/TGT-fdsjfsdfjkalfewrihfdhfaie HTTP/1.0</p> <h2> <a href="#" name="24">وضعیت تیکت</a></h2> <p>وضعیت تیکت را بررسی کنید و مطمئن شوید که هنوز معتبر است و منقضی نشده است.</p> <p style="text-align: left;">GET /cas/v1/tickets/TGT-fdsjfsdfjkalfewrihfdhfaie HTTP/1.0</p> <p> <b>پاسخ موفق</b></p> <p>200 OK</p> <p> <b>پاسخ ناموفق</b></p> <p>404 NOT FOUND</p> <h2>متود users</h2> <p>از نسخه ۵.۳ به بعد میتوانید با استفاده از یک متود و ارسال پارامترهای مورد نیاز مشخصههای کاربر را دریافت کنید:</p> <p style="text-align: left;">POST /cas/v1/users HTTP/1.0</p> <p style="text-align: left;">username=battags&password=password&token=true&service={service name}</p> <h1> <a href="#" name="25">یکبار خروج (SLO)</a></h1> <p>همانطور که کاربر یک بار در سرویس SSO ورود میکند و سپس در سایر سامانه ها بدون ورود مجدد، احراز خواهد شد، در زمان خروج نیز چنین عملی اتفاق خواهد افتاد. همانطور که میدانیم نشست ایجاد شده برای کاربر مختص هر سامانه هست و زمانی که کاربر از یک سامانه خارج میشود تنها نشست مربوط به همان سامانه از بین میرود و کاربر در سایر سامانهها همچنان متصل باقی خواهد ماند. به طور بالقوه چندین برنامه به سرویس SSO متصل هستند و یک نشست داخلی برای کاربر دارند و تمایز بین خروج و خروج یکتا (SLO) براساس تعداد نشستهایی است که بر اساس یک عمل خروج به پایان می رسد.</p> <p>این عملیات به نام SLO یا Single Logout خوانده میشود که در ادامه در مورد نحوه انجام آن توضیح خواهیم داد. بدیهی هست که همانطور که در زمان اتصال به SSO برای ورود کاربران سامانهها باید در سمت خود تغییراتی را اعمال نمایند در این قسمت نیز این مسئله بایستی انجام شود.</p> <p> <b>نکته</b> <br> دقت کنید که مطالب ذکر شده در این قسمت مربوط به پروتکل CAS هست و با توجه به اینکه پروتکلهای دیگری مانند OAuth2, WS-Federation, OpenID, SAML, REST در این سرویس پشتیبانی میشوند، این مطالب صرفا مربوط به پروتکل CAS هست و سایر پروتکلهای رفتار و روش خود را دارند.</p> <p> </p> <h2> <a href="#" name="26"><b>عملیات خروج</b></a></h2> <p>عملیات خروج در دو حالت رخ میدهد:</p> <ol> <li>خروج از یک برنامه متصل به SSO</li> <li>خروج مستقیم از سامانه SSO</li> </ol> <p>در حالت عادی این خروجها بر روی یکدیگر هیچ اثری ندارد و هر کدام مستقل هستند. اتمام نشست یک برنامه تاثیری روی نشست سامانه SSO ندارد. این مسئله یکی از دلایل اصلی سردرگمی کاربران جدید و توسعهدهندگان سیستم SSO است.</p> <p>خروج یکباره در CAS تلاش میکند تا رابطه بین خروج برنامه و سامانه SSO را برقرار کند و آنها را هم نزدیک کند. هنگامی که CAS برای SLO پیکربندی شده است ، تلاش می کند تا برای هر برنامه ای که درخواست تأیید اعتبار به CAS را در طول جلسه SSO ارسال کرده است ، پیام های خروج را ارسال کند. یعنی درخواست خروج فقط برای سامانههایی که قبلا در طول نشست کاربر در SSO یکبار عملیات تایید تیکت ST را انجام دادهاند، ارسال میشود. پس اگر کاربری در طول آن نشست از سامانههایی استفاده کرده باشد عملا درخواست خروجی هم برای آنها ارسال نمیشود. بصورت کلی این سیستم یک تلاش بسیار خوب جهت سازگار کردن خروجهای کاربر بین سامانه SSO و کلیههای سامانههایی هست که به SSO متصل هستند و نتیجه این عملیات رضایتمندی کاربر و سازمان را افزایش خواهد داد.</p> <h2> <a href="#" name="27">CAS Logout</a></h2> <p>برای پروتکل CAS آدرس logout/ مسئول تخریب نشست فعلی کاربر هست. بنابراین اگر کاربری آدرسی (با توجه به نام دامنه اصلی) مطابق نمونه زیر را وارد کند از CAS خارج میشود و Ticket او دیگر معتبر نخواهد بود.</p> <p style="text-align: left;">https://accounts.mbsco.ir/cas/logout</p> <p>در اینجا هم امکان برگشت به سامانه اصلی وجود دارد. مشابه زمانی که کاربر به CAS متصل میشود. این قابلیت باید بر روی سرویس دهنده فعال باشد. در صورتی که فعال باشد با اضافه نمودن پارامتر service در انتها و تعیین URL مربوطه این عمل انجام خواهد شد. لازم به ذکر است که این آدرس باید در سامانه SSO تعریف شده باشد تا قابل استفاده باشد.</p> <p>همچنین در زمانی که یک TGT منقضی شود نیز مکانیزم SLO فراخوانی میشود. طبق این فرآیند یک notification به برنامهها جهت از بین بردن نشست کاربر ارسال میشود و این مسئله محدود به همین هست. پس از اعلام notification به برنامه، این وظیفه آن هست که آن را پیگیری و به درستی نشست کاربر در داخل خودش را نابود کند.</p> <p>از آنجایی که این عملیات بصورت فراگیر انجام میشود، لذا تمام برنامههایی که به SSO متصل هستند و کاربر در آنها نشست فعال از طریق SSO دارد، مطلع میشوند و کاربر از آنها قطع خواهد شد. این مسئله میتواند منجر به نارضایتی کاربر شود با توجه به اینکه این برنامهها رفتار مستقلی از یکدیگر دارند و شاید کاربر متوجه این موضوع نباشد.</p> <h2> <a href="#" name="28">روشهای SLO</a></h2> <p>از دو روش میتوان جهت این عملیات استفاده نمود:</p> <h3>Back Channel</h3> <p>سرویس CAS یک درخواست HTTP POST مستقیما به سامانه مربوطه ارسال میکند. این روش قدیمی هست و در حال حاضر بهتر است از روش دوم استفاده شود. نمونه داده ارسال شده مشابه ذیل است:</p> <p style="text-align: left;">samlp:LogoutRequest><br> " xmlns:samlp = "urn:oasis:names:tc:SAML:2.0:protocol <br> " xmlns:saml = "urn:oasis:names:tc:SAML:2.0:assertion <br> " ID= "[RANDOM ID] <br> " Version= "2.0 <br> <" IssueInstant = "[CURRENT DATE/TIME] <br> <saml:NameID> @NOT_USED@ </saml:NameID> <br> <samlp:SessionIndex> [SESSION IDENTIFIER] </samlp:SessionIndex> <br> <samlp:LogoutRequest /></p> <h3>Front Channel</h3> <p>در این روش CAS یک درخواست AJAX با روش GET و استفاده از فرمت داده JSONP به سامانه مربوطه ارسال میکند. رفتار مورد انتظار از هر سامانه غیر معتبر کردن نشست کاربر در همان سامانه هست.</p> <p> <b>نکته</b> <br> این روش ممکن است که توسط تمامی سامانه ها قابل استفاده نباشد. البته این مسئله به تکنولوژیهای مورد استفاده در آن سامانه بستگی دارد که آیا تکنولوژی به روز را پشتیبانی میکند یا خیر.</p> <p>یک نمونه از این داده به شکل زیر است. منظور از service.url آدرس سامانه مورد نظر هست.</p> <p style="text-align: left;">curl 'https://service.url?callback=jQuery112409319555380089843_1509437967792&logoutRequest=[BASE64 encoded request]&_=1509437967793'</p> <p>به عنوان مثال اینجا از ابزار curl جهت call کردن آدرس مربوطه استفاده شده است.</p> <h2> <a href="#" name="29">درخواست SLO</a></h2> <p>این درخواست به URL معرفی شده برای هر سرویس که قسمت مدیریت سرویسها در پنل مدیریت مرکزی SSO ارسال میشود. در مورد روش Back Channel مقدار session identifier همان مقدار service ticket ID (تیکت مختص به هر سامانه که در زمان اعتبارسنجی با ST شروع میشود) است. این تیکت اختصاصا برای هر سامانه در زمان اعتبار سنجی کاربر تولید میشود و یکبار مصرف هم هست. این مقدار برای تطبیق نشست کاربر در CAS با هر برنامه کاربرد دارد و به همین دلیل هم برای هر سامانه بصورت اختصاصی تولید شده است. بنابراین هر سامانه باید آخرین مقدار این تیکت را برای هر کاربر نگهداری کند تا بتواند تشخیص دهد که درخواست CAS مربوط به کدام کاربر هست. این تیکت میتواند در دیتابیس یا هر محلی که برنامه صلاح بداند ذخیره شود.</p> <p> <b>نکته</b> <br> این قابلیت میتواند برای بعضی از سرویسها و برای بعضی دیگر غیرفعال باشد. این مسئله به سیاستگذاری سازمان سرویس گیرنده بستگی دارد.</p> <p> </p> <h2> <a href="#" name="30">تعریف Endpoint برای نشستهای مشترک چند محصول</a></h2> <p>لزوما هر سامانه ممکن است مستقیم نخواهد از CAS استفاده کند و تمایلی به پیادهسازی مکانیزم logout نداشته باشد. بدین منظور برای سامانههایی که میخواهند درخواست logout به سرویس دیگری ارسال شود این امکان وجود دارد. مثلا ممکن است چندین سامانه سرویس گیرنده از یک شرکت، نشست کاربر را بصورت مشترک استفاده میکنند و میخواهند یک نقطه واحد logout برای همه سامانه ها داشته باشند. در این صورت لازم هست که برای کلیه سامانه های آن شرکت یک آدرس جهت logout تعریف شود و CAS درخواست را به همان آدرس ارسال میکند.</p> <h2>SSO Session vs. Application Session</h2> <p>جهت درک بهتر موضوع مدیریت نشستها در سمت سرویس دهنده SSO ذکر این نکته ضروری هست که نشست کاربر در برنامه سرویس گیرنده با نشست کاربر در سمت SSO کاملا متفاوت هست. نشست کاربر در سمت CAS توسط TicketGrantingTicket یا همان تیکت TGT کنترل میشود و TGT id از طریق یک secure cookie بین سرور CAS و مرورگر کاربر به اشتراک گذاشته میشود.</p> <p>زمانی که تایید اعتبار کاربر از طریق یک سرویس انجام میشود دیگر CAS هیچ مسوولیتی نسبت به نشست کاربر در آن سامانه ندارد و هیچ ارتباطی تا زمان logout بین آنها وجود نخواهد داشت. بنابراین تمام سیاستهای هر سامانه برای آن نشست به CAS وابستگی ندارد و خود سامانه مسوول آن هست. توجه داشته باشیم که یک سامانه مستقلا میتواند نشست یک کاربر را منقضی کند و مجددا کاربر را با یک تیکت ST جدید اعتبار سنجی کند اما بدیهی هست که تا زمانی که کاربر از CAS خارج نشده باشد این اعتبارسنجی با موفقیت همراه خواهد بود و صرفا یک تیکت ST جدید برای آن سامانه صادر میشود.</p> <h1> <a href="#" name="31">صحت اتصال سامانهها به SSO</a></h1> <p>با توجه به اینکه در پیادهسازی مکانیزمهای SSO (بدون در نظر گرفتن نوع پروتکل) جهت اتصال هر سامانه به این سرویس، باید الزاماتی طبق استانداردهای احراز هویت برای برنامههای تحت وب انجام شود، در این بخش این موارد ذکر میشود. بدیهی هست که این موارد بر طبق استانداردهایی هست که برای احراز هویت برنامههای تحت بدون اتصال به SSO هم وجود دارد و جهت حفظ شرایط کارکردی و امنیتی باید در این نوع احراز هویت نیز پیادهسازی گردد.</p> <p> <b>نکته</b> <br> در ادامه منظور از سامانه برنامه تحت وب مورد استفاده کاربر که به SSO متصل شده است،خواهد بود و سرویس SSO با عبارت «سرویس SSO» مشخص میشود.</p> <p>در بندهای ذیل الزاماتی که هر سامانه باید در اتصال با SSO پیادهسازی کند را قید کردهایم. لذا مفاهیم بیان شده میبایست در سامانهها پیادهسازی شود. در غیر اینصورت روش اتصال صحیح و مطابق با استاندارد نخواهد بود. پس از پیادهسازی کامل باید کارکرد سامانه متصل شده به SSO مطابق با web flow ذیل باشد. هم برای اولین ورود و هم برای ورودهایی که کاربر از قبل Ticket دارد.</p> <p> </p> <p style="text-align: center;"> <img alt="SSO Web Flow" src="https://ictc.sharif.edu/documents/109144/0/300px-SSO_flow_diagram+%281%29.png/3204d158-d913-902c-c8bb-d6f6094c28e4?t=1638167821712&imagePreview=1"></p> <p style="text-align: center;">SSO Web Flow</p> <p> </p> <h2> <a href="#" name="32">مدیریت نشست کاربران</a></h2> <p>در حالت عادی یک برنامه از یک نشست داخلی برای هر کاربر استفاده میکند. یعنی در زمان ورود کاربر از طریق صفحه login برای هر کاربر یک نشست کاربری شکل میگیرد و اصولا در دیتابیس یا حافظه RAM یا سرویسهای مانند Redis و غیره ذخیره میشود. زمانی که کاربر از طریق SSO وارد میشود، یک نشست سمت سرویس SSO وجود دارد و یک نشست به کمک کلید مشترک بین دو سیستم، در سمت برنامه مورد استفاده کاربر، ایجاد میشود.</p> <p>بدیهی است که پس از مکانیزم اولیه شناسایی کاربر توسط SSO، کاربر دیگر نباید به سمت SSO هدایت شود و این امر باید توسط سامانه، مدیریت شود، که در ادامه بصورت کامل توضیح داده خواهد شد. لذا مدیریت نشست کاربران در دو قسمت صورت میگیرد. سمت سامانه و سمت سرویس SSO. بنابراین در زمان شناسایی کاربر و خروج کاربر این نکته باید مد نظر قرار گیرد.</p> <h2> <a href="#" name="33">نقش کلید مشترک در تشکیل نشست</a></h2> <p>جهت تشخیص اینکه کدام کاربر وارد یک سامانه شده است، از مشخصههای برگشتی که پس از تعیین اعتبار کلید ST صورت خواهد گرفت، استفاده میشود. اگر سامانهای فاقد کلید مشترک (به شرط یکتا بودن داده به ازای هر کاربر) با سرویس SSO هست، میبایست پیشبینی لازم در این قسمت را داشته باشد و اقدام به ورود داده نماید. با توجه به اینکه کد ملی برای همه افراد در هر نقش و وضعیتی یک کلید یکتای رسمی هست، لذا تقریبا در همه سازمانها این کلید به عنوان کلید مشترک بین سامانهها استفاده میشود. تصور کنید که کاربر در یک سامانه با کد پرسنلی وارد میشود. الان این کاربر به سرویس SSO متصل شده است و مشخصههای مجاز کاربر به آن سامانه داده میشود. سامانه میتواند از کد ملی (یا کد پرسنلی یا هر فیلد یکتای مشترک) که در مشخصههای بازگشتی کاربر مشخص است، استفاده کند و کاربر را در دیتابیس محلی خود پیدا کند و برای آن کاربر یک نشست ایجاد کند.</p> <p>توجه کنید که این عملیات قبلا هم توسط سامانه انجام شده است اما ابتدای آن فرآیند ورود کاربر از صفحه ورود همان سامانه انجام شده است و تفاوت آن در این هست که به جای چک کردن نام کاربری و رمز عبور، صرفا با استفاده از یک کلید مشترک کاربر در دیتابیس سامانه جستجو میشود وبرای آن نشست ایجاد میشود.</p> <p>لذا در این مرحله ۲ نشست وجود دارد. نشست اول سمت سرویس SSO (که برای همه سامانهها به ازای هر کاربر یکسان هست) و نشست دوم سمت هر سامانه که برای هر سامانه منحصر به خود سامانه است و سامانه دیگری هم به آن دسترسی ندارد. از این مرحله به بعد هر سامانه با نشست محلی کاربر کار میکند و نیازی به انجام استعلام از SSO ندارد. البته در صورت نیاز برای مواقع خاص امکان صدور تیکت ST جدید بر اساس تیکت TGC موجود در کوکی مرورگر وجود دارد.</p> <h2> <a href="#" name="34">نگهداری تیکت ST برای هر کاربر</a></h2> <p>هر زمان که یک سامانه بر اساس تیکت اصلی برای یک کاربر اقدام به دریافت تیکت ST نمود، به مدت ۱۰ ثانیه (این مقدار پیش فرض هست و بنابر سیاست سازمان تعیین میشود که در اکثر موارد به لحاظ امنیتی همین مقدار لحاظ شده است) فرصت دارد تا این تیکت را اعتبارسنجی کند. در صورت اعتبار سنجی موفق از سمت سرویس SSO این تیکت به عنوان آخرین تیکت اعتبارسنجی شده برای کاربر مشخص و به ازای سامانه مربوطه، در نشست کاربر نگهداری میشود.</p> <p>جهت پیادهسازی مکانیزم SLO پس از خروج موفق یک کاربر از سرویس SSO (چه بصورت مستقیم یا غیر مستقیم که توسط یک سامانه دیگر انجام میشود) سایر سامانهها نیز باید از این امر مطلع شوند. کلید مشترک برای این اطلاعرسانی تیکت ST هست. این تیکت باید بر اساس نام کاربر محلی یا session-id کاربر محلی سامانه در یک دیتابیس یا فضای مناسبی نگهداری شود. در بخشهای بعدی فرآیند SLO بصورت منطقی تشریح خواهد شد.</p> <h2> <a href="#" name="35">ورود خودکار کاربران شناسایی شده در SSO</a></h2> <p>با توجه به توضیحات بندهای قبل، در حالتی که یک کاربر از قبل در SSO وارد شده باشد، قابل شناسایی هست. یک سامانه میتواند با چک کردن cookie مربوط به کاربر با استفاده از توابع موجود در کتابخانه client ، و از طریق ارتباط مستقیم با سرویس SSO با استفاده از تیکت کاربر درخواست صدور تیکت ST را بدهد و آن را اعتبارسنجی کند. لذا همانند حالت عادی زمانی که یک کاربر وارد یک سامانه میشود (منظور وارد کردن هر آدرس معتبری و URL از آن سامانه هست) میبایست به صورت خودکار در صورت داشتن تیکت و صحت استعلام آن،به سیستم وارد شود.</p> <p>در هر صفحه سامانه تحت وب با استفاده از مکانیزمهایی مانند bootstrap یا middleware یا هر روش استانداردی که سامانه میتواند استفاده کند، باید این مسئله قابل چک و تشخیص باشد. اینکه یک سامانه فقط از طریق آدرس URL مشخص و ثابتی این فرآیند را انجام دهد، کاملا خارج از استاندارد پیادهسازی SSO هست. روشهای دیگر مانند redirect اولیه از سمت سرویس SSO به سامانه مذکور نیز اشتباه هست.</p> <p>بصورت کلی زمانی که کاربر برای اولین بار وارد SSO میشود، یک کاربر شناسایی شده است و یک تیکت در اختیار دارد. این تیکت جهت ورود کاربر به همه سامانههای متصل به SSO استفاده خواهد شد. لذا زمانی که کاربر لینک یک سامانه را به صورت مستقیم باز میکند، سامانه مربوطه اجبارا باید وجود تیکت کاربر را چک کند و در صورت وجود اقدام به دریافت تیکت ST و سایر مراحل نماید. هرگونه روش دیگر که تمام سامانه را تحت پوشش ورود خودکار کاربر شناسایی شده، قرار ندهد، کاملا غیر استاندارد بوده و مورد پذیرش نخواهد بود.</p> <p>بعنوان نمونه متود زیر از کتابخانه phpCAS امکان بررسی وضعیت فعلی کاربر را دارد و در صورتی که کاربر از قبل در SSO وارد شده باشد مقدار true برمیگرداند. در سایر کتابخانهها نیز این مسئله پیادهسازی شده و قابل استفاده هست.</p> <p>در ذیل تابع اول نمایش داده شده است که تابع دیگری را فراخوانی میکند که تابع دوم نیز در ادامه آورده شده است.</p> <p> <strong>تابع اول</strong></p> <table align="center" border="0" cellpadding="1" cellspacing="1"> <tbody> <tr> <td> <pre> 1 <i>/**</i></pre> <pre> 2 <i> * Checks to see is user is globally in CAS</i></pre> <pre> 3 <i> *</i></pre> <pre> 4 <i> * @return boolean</i></pre> <pre> 5 <i> */</i></pre> <pre> 6 <b>public</b> <b>function</b> checkAuthentication() {</pre> <pre> 7 <b>return</b> $this->isMasquerading() ? <b>true</b> : phpCAS::checkAuthentication();</pre> <pre> 8 }</pre> </td> </tr> </tbody> </table> <p> </p> <p> <b>تابع دوم فراخوان شده توسط تابع اول</b></p> <table align="center" border="0" cellpadding="1" cellspacing="1"> <tbody> <tr> <td> <pre> 1 <b>public</b> <b>static</b> <b>function</b> checkAuthentication()</pre> <pre> 2 {</pre> <pre> 3 phpCAS :: traceBegin();</pre> <pre> 4 phpCAS::_validateClientExists();</pre> <pre> 5 </pre> <pre> 6 $auth = self::$_PHPCAS_CLIENT->checkAuthentication();</pre> <pre> 7 </pre> <pre> 8 <i>// store where the authentication has been checked and the result</i></pre> <pre> 9 self::$_PHPCAS_CLIENT->markAuthenticationCall($auth);</pre> <pre> 10 </pre> <pre> 11 phpCAS :: traceEnd($auth);</pre> <pre> 12 <b>return</b> $auth; 13 }</pre> </td> </tr> <tr> <td> <h3> </h3> </td> </tr> </tbody> </table> <p> </p> <p> </p> <p>لذا کاربری که قبلا به SSO وارد شده است، به هیچ وجه نباید به سمت سرویس SSO هدایت شود یا اینکه نیازی باشد که از طریق سرویس SSO به سامانه متصل شود. با ورود به هر صفحهای از سامانه باید شناسایی شده و نشست آن ایجاد شود.</p> <h2> <a href="#" name="36">مفهوم و صحت کارکرد SLO</a></h2> <p>زمانی که یک کاربر از سامانه خارج میشود، جدا از اینکه آن سامانه نشست کاربر را تخریب میکند،اقدام به هدایت کاربر به آدرس cas/logout/ میکند. پس از اتصال کاربر به این آدرس، نشست کاربر سمت SSO نیز از بین خواهد رفت. اما یک مشکل باقی میماند. کاربر در سایر سامانههای وارد شده و نشست محلی کاربر برقرار هست و سامانهها متوجه این امر نمیشوند. این مسئله ۲ راهکار دارد:</p> <p>۱- اینکه به ازای هر درخواست و عملیات کاربر در سامانه مربوطه، درخواست صدور تیکت ST جدید داده شود و اعتبارسنجی صورت بگیرد. که این روش اشتباه هست و باعث ایجاد سربار بسیار زیاد و البته کندی، بر روی سامانه و همچنین SSO خواهد شد و این عملیات اصلا مورد نیاز هست و این روش پیادهسازی کاملا اشتباه هست.</p> <p>۲- سامانه مربوطه باید مکانیزم SLO طبق توضیحات همین مستند را پیادهسازی کند که روش سادهتر آن استفاده از مکانیزم Back Channel هست.</p> <p>طبق روش دوم زمانی که کاربر وارد میشود آخرین تیکت ST مربوط به آن کاربر که به ازای سامانه مربوطه صادر شده است، در نشست کاربر سمت سرویس SSO نگهداری میشود. همین کار باید سمت سامانه نیز انجام شود. اگر فرض کنیم سامانهای برای تخریب نشست کاربر از session-id کاربر استفاده میکند، میتواند آخرین تیکت ST اعتبارسنجی شده برای آن کاربر را در دیتابیس به همراه session-id نگهداری کند. (یا میتواند از یک کلید مشترک دیگر که به session-id یکتا میتواند برسد، استفاده کند) زمانی که کاربر از سمت سرویس SSO خارج میشود، این سرویس بر اساس نشستهای فعال کاربر در سایر سامانهها (سامانههایی که تیکت ST را برای آن کاربر دریافت نموده و اعتبار سنجی کردهاند) میتواند به آنها اطلاع رسانی کند.</p> <p>این اطلاع رسانی جهت خارج کردن کاربر از آن سامانهها صورت میگیرد و منطق پیادهسازی آن در قسمت SLO این مستند ذکر شده است. اما بصورت کلی تیکت ST مربوط به کاربر برای هر سامانه به آن سامانه روی درگاه مشخص شده از سمت آن سامانه ارسال میشود. منظور از درگاه مشخص شده آدرس URLی از آن سامانه هست که داده مربوطه را از سرویس SSO دریافت میکند و بر اساس آن کاربر را پیدا میکند و نشست آن را تخریب میکند.</p> <p>آدرس logout برای هر سامانه باید اعلام گردد و این آدرس سمت سرویس SSO تعریف میشود. لذا در زمان خروج کاربر داده مربوطه بر اساس روش مشخص شده Front channel یا Back channel به آن سامانه اعلام میشود و سامانه موظف هست که نشست کاربر مربوطه را تخریب کند و کلیه عملیاتی که از سمت آن کاربر درخواست میشود را نادیده بگیرد و کاربر را از سامانه خارج کند.</p> <p> <b>هشدار</b> <br> در یک اتصال صحیح تمامی موارد بالا الزاما باید رعایت شود و سایر پیادهسازیها مطابق با استانداردها و الگوهای اثبات شده احراز هویت نیست و این مسائل فارغ از پروتکل استفاده شده برای سرویس SSO هست.</p> <hr> <p>مرجع</p> <ol> <li id="cite_note-1"> <a href="https://ictc.sharif.edu/group/ictc/~/control_panel/manage?p_p_id=com_liferay_wiki_web_portlet_WikiAdminPortlet&p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view&_com_liferay_wiki_web_portlet_WikiAdminPortlet_mvcRenderCommandName=%2Fwiki%2Fview&_com_liferay_wiki_web_portlet_WikiAdminPortlet_redirect=https%3A%2F%2Fictc.sharif.edu%2Fgroup%2Fictc%2F~%2Fcontrol_panel%2Fmanage%3Fp_p_id%3Dcom_liferay_wiki_web_portlet_WikiAdminPortlet%26p_p_lifecycle%3D0%26p_p_state%3Dmaximized%26p_p_mode%3Dview%26_com_liferay_wiki_web_portlet_WikiAdminPortlet_redirect%3Dhttps%253A%252F%252Fictc.sharif.edu%252Fgroup%252Fictc%252F%257E%252Fcontrol_panel%252Fmanage%253Fp_p_id%253Dcom_liferay_wiki_web_portlet_WikiAdminPortlet%2526p_p_lifecycle%253D0%2526p_p_state%253Dmaximized%2526p_p_mode%253Dview%26_com_liferay_wiki_web_portlet_WikiAdminPortlet_mvcRenderCommandName%3D%252Fwiki%252Fview_pages%26_com_liferay_wiki_web_portlet_WikiAdminPortlet_navigation%3Dall-pages%26_com_liferay_wiki_web_portlet_WikiAdminPortlet_nodeId%3D2510842&_com_liferay_wiki_web_portlet_WikiAdminPortlet_nodeName=CAS%20Development&_com_liferay_wiki_web_portlet_WikiAdminPortlet_title=FrontPage%20(11.21.22%208.00%20AM)%20(11.21.22%208.00%20AM)%20(11.21.22%208.00%20AM)#cite_ref-1">↑</a> ticket granting ticket</li> </ol> </div> <div class="taglib-social-bookmarks" id="ykmt___socialBookmarks"> <div><button class="btn btn-outline-borderless btn-sm btn-outline-secondary" type="button"><span class="inline-item inline-item-before"><svg class="lexicon-icon lexicon-icon-share" role="presentation" viewbox="0 0 512 512"><use xlink:href="https://ictc.sharif.ir/o/shu-theme/images/clay/icons.svg#share" /></svg></span>اشتراگ گذاری</button><div id="mlme"></div></div> </div> <div class="kb-article-ratings"> <div class="ratings"> <div class="ratings-thumbs"> <button class="btn btn-outline-borderless btn-sm btn-outline-secondary" disabled="true" type="button"> <svg class="lexicon-icon lexicon-icon-thumbs-up" role="presentation" viewbox="0 0 512 512"><use xlink:href="https://ictc.sharif.ir/o/shu-theme/images/clay/icons.svg#thumbs-up" /></svg> </button> <button class="btn btn-monospaced btn-outline-borderless btn-sm btn-outline-secondary" disabled="true" type="button"><span class="inline-item"><svg class="lexicon-icon lexicon-icon-thumbs-down" role="presentation" viewbox="0 0 512 512"><use xlink:href="https://ictc.sharif.ir/o/shu-theme/images/clay/icons.svg#thumbs-down" /></svg></span></button> </div> <div id="ejtq"></div> </div> </div> <div class="kb-article-siblings"> <span class="kb-article-previous"> </span> <span class="kb-article-next"> </span> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </section> </div> </div> </div> </div> </div> <div class="col col-lg-2 col-sm-2 col-2 col-md-2"> </div> </div> </div> </div> <div class=" mb-lg-0 ml-lg-0 mr-lg-0 mt-lg-0 pb-lg-0 pl-lg-0 pr-lg-0 pt-lg-0" style="box-sizing: border-box;border-style: solid; border-width: 0px;opacity: 1.0;"> <div class=" mb-lg-0 ml-lg-0 mr-lg-0 mt-lg-0 pb-lg-0 pl-lg-0 pr-lg-0 pt-lg-0" style="box-sizing: border-box;border-style: solid; border-width: 0px;opacity: 1.0;overflow: hidden;"> <div class="row align-items-lg-start align-items-sm-start align-items-start align-items-md-start flex-lg-row flex-sm-row flex-row flex-md-row"> <div class="col col-lg-12 col-sm-12 col-12 col-md-12"> </div> </div> </div> </div> </div> <form action="#" aria-hidden="true" class="hide" id="hrefFm" method="post" name="hrefFm"><span></span><input hidden type="submit"/></form> </section> <footer class="sp-footer"> <div class="sp-top-footer"> <div class="container"> <div class="row"> <div class="col-12 order-2 col-md-5 order-md-1"> <div class="sp-social"> <ul class="sp-social-items"> </ul> </div> </div> <div class="col-12 order-1 col-md-2 order-md-2"> </div> <div class="col-12 order-3 col-md-5 order-md-3"> <!--div class="sp-news-letter float-right"> <div class="sp-column text-center text-lg-right"> <div class="sp-news-letter float-right"> <div class="sp-column text-center text-lg-right"><input name="email" placeholder="ایمیل" type="text" /><button>عضویت در خبرنامه</button></div> </div> </div> </div--> </div> </div> </div> </div> <div class="sp-center-footer"> <div class="container"> <div class="row"> <div class="col-12 col-sm-6 col-lg-3 "> <ul class="sp-list text-left mb-3 mb-md-0"> <h4 class="sp-title">دفاتر ، وزارتخانه ها</h4> <li><a href="http://www.msrt.ir/">وزارت علوم ،تحقیقات و فناوری</a> </li> <li><a href="https://www.ict.gov.ir/">وزارت ارتباطات و فناوری اطلاعات</a> </li> <li><a href="https://tafa.msrt.ir">اداره کل فناوری اطلاعات وزارت عتف</a> </li> </ul> </div> <div class="col-12 col-sm-6 col-lg-3"> <ul class="sp-list text-left mb-3 mb-md-0"> <h4 class="sp-title">لینک های مفید</h4> <li><a href="http://www.sharif.edu">دانشگاه صنعتی شریف</a> </li> <li><a href="http://research.sharif.edu">معاونت پژوهش و فناوری دانشگاه</a> </li> <li><a href="http://hpc.sharif.edu">مرکز پردازش سریع (HPC)</a> </li> </ul> </div> <div class="col-12 col-sm-12 col-lg-2"></div> <div class="col-12 col-sm-9 m-sm-auto col-lg-4 text-center"> <ul class="sp-contact mt-sm-4 mt-lg-0"> <div class="row"> <div class="col-12 col-sm-9 col-md-6 col-lg-8"> <div class="col-12 col-md-12 text-left p-00"> <i class="fa fa-map-marker"></i> تهران، خیابان آزادی، دانشگاه صنعتی شریف، مرکز فناوری اطلاعات و ارتباطات </div> <div class="col-12 col-md-12 text-left p-00"> <i class="fa fa-phone"></i> میزخدمت ۶۶۱۶4156 - ۰۲۱ </div> <div class="col-12 col-md-12 text-left p-00"> <i class="fa fa-phone"></i> امور دفتری ۶۶۱۶4150 - ۰۲۱ </div> <div class="col-12 col-md-12 text-left p-00"> <i class="fa fa-fax"></i> ۶۶۰۱۵۳۶۳ - ۰۲۱ </div> <div class="col-12 col-md-12 text-left p-00"> <i class="fa fa-envelope"></i> ۱۴۵۸۸۸۹۶۹۴ </div> <div class="col-12 col-md-12 text-left p-00"> <i class="fa fa-internet-explorer"></i> ictc@sharif.ir </div> </div> <div class="d-none d-sm-block col-sm-3 col-md-6 col-lg-4"> </div> </div> </ul> <style> .sp-contact i.fa { font-size: 1.3em; } </style> </div> </div> </div> </div> <div class="sp-bottom-footer"> <div class="container"> <div class="row"> <div class="col-lg-6"> <div class="sp-menu-bottom"> <ul> <li><a href="/معرفی-مرکز">درباره مرکز</a></li> <li><a href="#">خدمات</a></li> <li><a href="#">راهنما</a></li> <li><a href="http://noc.sharif.edu">گزارش مشکل</a></li> <li><a href="/تماس-با-ما">تماس با ما</a></li> </ul> </div> </div> <div class="col-lg-6"> <p class="sp-copyright">کلیه حقوق مادی و معنوی این وب سایت متعلق به دانشگاه صنعتی شریف میباشد.</p> </div> </div> </div> </div> </footer> </div> </div> <script> AOS.init(); </script> <script type="text/javascript"> // <![CDATA[ // ]]> </script> <script type="text/javascript"> // <![CDATA[ Liferay.currentURL = '\x2fcas-development'; Liferay.currentURLEncoded = '\x252Fcas-development'; // ]]> </script> <script type="text/javascript"> // <![CDATA[ document.getElementsByClassName("carousel-inner")[0].insertAdjacentHTML( 'beforeend', '<div class="ClabLogin">' + '<div class="clabbox">' + '<a href="https://lims.centrallab.sharif.ir/account/login" title="ورود مشتریان" target="_blank">ورود مشتریان</a> / ' + '<a href="https://lims.centrallab.sharif.ir/account/register" title="ثبت نام" target="_blank">ثبت نام</a> <svg aria-hidden="true" class="lexicon-icon lexicon-icon-user" focusable="false"><use href="https://centrallab.sharif.edu/o/shu-theme/images/clay/icons.svg#user"></use></svg>' + '</div>'+ '</div>' ); document.getElementsByClassName("public-page")[0].insertAdjacentHTML( 'beforeend', '<div class="clab-right-widgets"><div class="clab-social"><a href="https://www.aparat.com/sharifcentrallab" rel="nofollow" target="_blank"><i class="clab-aparat"></i></a><a href="https://www.linkedin.com/company/sharif-centrallab/" rel="nofollow" target="_blank"><i class="clab-linkedin"></i></a></div>'+ '<div class="clab-right-widget">'+ '<div class="clab-right-widget-content">'+ '<a href="https://centrallab.sharif.edu/contact-us" title="تماس با ما" target="_blank">'+ '<img src="https://www.sharif.edu/documents/8770303/0/clab-tel-ico.png/">'+ '</a>'+ '<a href="http://ticket.centrallab.sharif.edu/" title="ارسال تیکت" target="_blank">'+ '<img src="https://www.sharif.edu/documents/8770303/0/clab-message-ico.png/">'+ '</a>'+ '<a href="https://centrallab.sharif.edu/counseling" title="مشاوره با ما" target="_blank">'+ '<img src="https://www.sharif.edu/documents/8770303/0/clab-on-serv.png/">'+ '</a>'+ '</div>'+ '</div>'+ '<a id="upbutton"></a>'+ '</div>' ); var btn = $('.clab-right-widgets'); var btn2 = $('#upbutton'); $(window).scroll(function() { if ($(window).scrollTop() > 350) { btn.addClass('show'); } else { btn.removeClass('show'); } }); btn2.on('click', function(e) { e.preventDefault(); $('html, body').animate({scrollTop:0}, '300'); }); // ]]> </script> <script type="text/javascript"> // <![CDATA[ (function() {var $ = AUI.$;var _ = AUI._; var onDestroyPortlet = function () { Liferay.detach('messagePosted', onMessagePosted); Liferay.detach('destroyPortlet', onDestroyPortlet); }; Liferay.on('destroyPortlet', onDestroyPortlet); var onMessagePosted = function (event) { if (window.Analytics) { Analytics.send('posted', 'Comment', { className: event.className, classPK: event.classPK, commentId: event.commentId, text: event.text, }); } }; Liferay.on('messagePosted', onMessagePosted); })();(function() {var $ = AUI.$;var _ = AUI._; var pathnameRegexp = /\/documents\/(\d+)\/(\d+)\/(.+?)\/([^&]+)/; function handleDownloadClick(event) { if (event.target.nodeName.toLowerCase() === 'a' && window.Analytics) { var anchor = event.target; var match = pathnameRegexp.exec(anchor.pathname); var fileEntryId = anchor.dataset.analyticsFileEntryId || (anchor.parentElement && anchor.parentElement.dataset.analyticsFileEntryId); if (fileEntryId && match) { var getParameterValue = function (parameterName) { var result = null; anchor.search .substr(1) .split('&') .forEach(function (item) { var tmp = item.split('='); if (tmp[0] === parameterName) { result = decodeURIComponent(tmp[1]); } }); return result; }; Analytics.send('documentDownloaded', 'Document', { groupId: match[1], fileEntryId: fileEntryId, preview: !!window._com_liferay_document_library_analytics_isViewFileEntry, title: decodeURIComponent(match[3].replace(/\+/gi, ' ')), version: getParameterValue('version'), }); } } } Liferay.once('destroyPortlet', function () { document.body.removeEventListener('click', handleDownloadClick); }); Liferay.once('portletReady', function () { document.body.addEventListener('click', handleDownloadClick); }); })();(function() {var $ = AUI.$;var _ = AUI._; var onVote = function (event) { if (window.Analytics) { Analytics.send('VOTE', 'Ratings', { className: event.className, classPK: event.classPK, ratingType: event.ratingType, score: event.score, }); } }; var onDestroyPortlet = function () { Liferay.detach('ratings:vote', onVote); Liferay.detach('destroyPortlet', onDestroyPortlet); }; Liferay.on('ratings:vote', onVote); Liferay.on('destroyPortlet', onDestroyPortlet); })();(function() {var $ = AUI.$;var _ = AUI._; var onShare = function (data) { if (window.Analytics) { Analytics.send('shared', 'SocialBookmarks', { className: data.className, classPK: data.classPK, type: data.type, url: data.url, }); } }; var onDestroyPortlet = function () { Liferay.detach('socialBookmarks:share', onShare); Liferay.detach('destroyPortlet', onDestroyPortlet); }; Liferay.on('socialBookmarks:share', onShare); Liferay.on('destroyPortlet', onDestroyPortlet); })(); if (window.svg4everybody && Liferay.Data.ICONS_INLINE_SVG) { svg4everybody( { polyfill: true, validate: function (src, svg, use) { return !src || !src.startsWith('#'); } } ); } Liferay.Portlet.register('com_liferay_product_navigation_user_personal_bar_web_portlet_ProductNavigationUserPersonalBarPortlet'); Liferay.Portlet.onLoad( { canEditTitle: false, columnPos: 0, isStatic: 'end', namespacedId: 'p_p_id_com_liferay_product_navigation_user_personal_bar_web_portlet_ProductNavigationUserPersonalBarPortlet_', portletId: 'com_liferay_product_navigation_user_personal_bar_web_portlet_ProductNavigationUserPersonalBarPortlet', refreshURL: '\x2fc\x2fportal\x2frender_portlet\x3fp_l_id\x3d11144\x26p_p_id\x3dcom_liferay_product_navigation_user_personal_bar_web_portlet_ProductNavigationUserPersonalBarPortlet\x26p_p_lifecycle\x3d0\x26p_t_lifecycle\x3d0\x26p_p_state\x3dnormal\x26p_p_mode\x3dview\x26p_p_col_id\x3dnull\x26p_p_col_pos\x3dnull\x26p_p_col_count\x3dnull\x26p_p_static\x3d1\x26p_p_isolated\x3d1\x26currentURL\x3d\x252Fcas-development\x26settingsScope\x3dportletInstance', refreshURLData: {} } ); Liferay.Portlet.register('com_liferay_site_navigation_language_web_portlet_SiteNavigationLanguagePortlet'); Liferay.Portlet.onLoad( { canEditTitle: false, columnPos: 0, isStatic: 'end', namespacedId: 'p_p_id_com_liferay_site_navigation_language_web_portlet_SiteNavigationLanguagePortlet_', portletId: 'com_liferay_site_navigation_language_web_portlet_SiteNavigationLanguagePortlet', refreshURL: '\x2fc\x2fportal\x2frender_portlet\x3fp_l_id\x3d11144\x26p_p_id\x3dcom_liferay_site_navigation_language_web_portlet_SiteNavigationLanguagePortlet\x26p_p_lifecycle\x3d0\x26p_t_lifecycle\x3d0\x26p_p_state\x3dnormal\x26p_p_mode\x3dview\x26p_p_col_id\x3dnull\x26p_p_col_pos\x3dnull\x26p_p_col_count\x3dnull\x26p_p_static\x3d1\x26p_p_isolated\x3d1\x26currentURL\x3d\x252Fcas-development\x26settingsScope\x3dportletInstance', refreshURLData: {} } ); Liferay.Portlet.register('com_liferay_knowledge_base_web_portlet_DisplayPortlet'); Liferay.Portlet.onLoad( { canEditTitle: false, columnPos: 0, isStatic: 'end', namespacedId: 'p_p_id_com_liferay_knowledge_base_web_portlet_DisplayPortlet_', portletId: 'com_liferay_knowledge_base_web_portlet_DisplayPortlet', refreshURL: '\x2fc\x2fportal\x2frender_portlet\x3fp_l_id\x3d11144\x26p_p_id\x3dcom_liferay_knowledge_base_web_portlet_DisplayPortlet\x26p_p_lifecycle\x3d0\x26p_t_lifecycle\x3d0\x26p_p_state\x3dnormal\x26p_p_mode\x3dview\x26p_p_col_id\x3dnull\x26p_p_col_pos\x3dnull\x26p_p_col_count\x3dnull\x26p_p_static\x3d1\x26p_p_isolated\x3d1\x26currentURL\x3d\x252Fcas-development\x26settingsScope\x3dportletInstance', refreshURLData: {} } ); Liferay.Portlet.register('com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch'); Liferay.Portlet.onLoad( { canEditTitle: false, columnPos: 0, isStatic: 'end', namespacedId: 'p_p_id_com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch_', portletId: 'com_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch', refreshURL: '\x2fc\x2fportal\x2frender_portlet\x3fp_l_id\x3d11144\x26p_p_id\x3dcom_liferay_portal_search_web_search_bar_portlet_SearchBarPortlet_INSTANCE_templateSearch\x26p_p_lifecycle\x3d0\x26p_t_lifecycle\x3d0\x26p_p_state\x3dnormal\x26p_p_mode\x3dview\x26p_p_col_id\x3dnull\x26p_p_col_pos\x3dnull\x26p_p_col_count\x3dnull\x26p_p_static\x3d1\x26p_p_isolated\x3d1\x26currentURL\x3d\x252Fcas-development\x26settingsScope\x3dportletInstance', refreshURLData: {} } ); Liferay.Portlet.register('com_liferay_portal_search_web_portlet_SearchPortlet'); Liferay.Portlet.onLoad( { canEditTitle: false, columnPos: 0, isStatic: 'end', namespacedId: 'p_p_id_com_liferay_portal_search_web_portlet_SearchPortlet_', portletId: 'com_liferay_portal_search_web_portlet_SearchPortlet', refreshURL: '\x2fc\x2fportal\x2frender_portlet\x3fp_l_id\x3d11144\x26p_p_id\x3dcom_liferay_portal_search_web_portlet_SearchPortlet\x26p_p_lifecycle\x3d0\x26p_t_lifecycle\x3d0\x26p_p_state\x3dnormal\x26p_p_mode\x3dview\x26p_p_col_id\x3dnull\x26p_p_col_pos\x3dnull\x26p_p_col_count\x3dnull\x26p_p_static\x3d1\x26p_p_isolated\x3d1\x26currentURL\x3d\x252Fcas-development\x26settingsScope\x3dportletInstance', refreshURLData: {} } ); Liferay.Loader.require('metal-dom/src/all/dom', 'frontend-js-web/liferay/toast/commands/OpenToast.es', 'portal-template-react-renderer-impl@4.0.8/render.es', 'frontend-taglib-clay@6.3.16/DropdownMenu', 'social-bookmarks-taglib@3.0.15/bookmarks/SocialBookmarksDropdownPropsTransformer', 'portal-template-react-renderer-impl@4.0.8/render.es', 'ratings-taglib@2.1.12/js/Ratings', function(metalDomSrcAllDom, frontendJsWebLiferayToastCommandsOpenToastEs, portalTemplateReactRendererImpl408RenderEs, frontendTaglibClay6316DropdownMenu, socialBookmarksTaglib3015BookmarksSocialBookmarksDropdownPropsTransformer, portalTemplateReactRendererImpl408RenderEs1, ratingsTaglib2112JsRatings) { try { (function() { var dom = metalDomSrcAllDom; var $ = AUI.$;var _ = AUI._; var focusInPortletHandler = dom.delegate( document, 'focusin', '.portlet', function(event) { dom.addClasses(dom.closest(event.delegateTarget, '.portlet'), 'open'); } ); var focusOutPortletHandler = dom.delegate( document, 'focusout', '.portlet', function(event) { dom.removeClasses(dom.closest(event.delegateTarget, '.portlet'), 'open'); } ); })(); (function() { var toastCommands = frontendJsWebLiferayToastCommandsOpenToastEs; var $ = AUI.$;var _ = AUI._; AUI().use( 'liferay-session', function() { Liferay.Session = new Liferay.SessionBase( { autoExtend: true, redirectOnExpire: false, redirectUrl: 'https\x3a\x2f\x2fictc\x2esharif\x2eir\x2fweb\x2fguest', sessionLength: 890, warningLength: 0 } ); } ); })(); (function() { var rendermlme = portalTemplateReactRendererImpl408RenderEs; var renderFunctionmlme = frontendTaglibClay6316DropdownMenu; var propsTransformermlme = socialBookmarksTaglib3015BookmarksSocialBookmarksDropdownPropsTransformer; rendermlme.default(renderFunctionmlme.default, propsTransformermlme.default({"small":true,"componentId":null,"icon":"share","label":"اشتراگ گذاری","type":"button","locale":{"ISO3Country":"IRN","ISO3Language":"fas","country":"IR","displayCountry":"Iran","displayLanguage":"Persian","displayName":"Persian (Iran)","displayScript":"","displayVariant":"","extensionKeys":[],"language":"fa","script":"","unicodeLocaleAttributes":[],"unicodeLocaleKeys":[],"variant":""},"spritemap":"https:\/\/ictc.sharif.ir\/o\/shu-theme\/images\/clay\/icons.svg","displayType":"secondary","outline":false,"borderless":true,"cssClass":null,"portletId":"com_liferay_knowledge_base_web_portlet_DisplayPortlet","block":false,"monospaced":false,"id":null,"items":[{"data":{"postURL":"https:\/\/twitter.com\/intent\/tweet?text=%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C+CAS+Development&tw_p=tweetbutton&url=https:\/\/ictc.sharif.ir\/cas-development\/-\/knowledge_base\/-cas-development","classPK":"12141678","action":"post","className":"com.liferay.knowledge.base.model.KBArticle","type":"twitter","url":"https:\/\/ictc.sharif.ir\/cas-development\/-\/knowledge_base\/-cas-development"},"label":"توییتر","type":"item"},{"data":{"postURL":"http:\/\/www.facebook.com\/sharer.php?u=https%3A%2F%2Fictc.sharif.ir%2Fcas-development%2F-%2Fknowledge_base%2F-cas-development","classPK":"12141678","action":"post","className":"com.liferay.knowledge.base.model.KBArticle","type":"facebook","url":"https:\/\/ictc.sharif.ir\/cas-development\/-\/knowledge_base\/-cas-development"},"label":"فیسبوک","type":"item"},{"data":{"postURL":"http:\/\/www.linkedin.com\/shareArticle?title=%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C+CAS+Development&mini=true&url=https%3A%2F%2Fictc.sharif.ir%2Fcas-development%2F-%2Fknowledge_base%2F-cas-development&summary=","classPK":"12141678","action":"post","className":"com.liferay.knowledge.base.model.KBArticle","type":"linkedin","url":"https:\/\/ictc.sharif.ir\/cas-development\/-\/knowledge_base\/-cas-development"},"label":"لینکداین","type":"item"}],"portletNamespace":"_com_liferay_knowledge_base_web_portlet_DisplayPortlet_"}), 'mlme'); })(); (function() { var renderejtq = portalTemplateReactRendererImpl408RenderEs1; var renderFunctionejtq = ratingsTaglib2112JsRatings; renderejtq.default(renderFunctionejtq.default, {"numberOfStars":5,"thumbDown":false,"componentId":null,"initialPositiveVotes":0,"className":"com.liferay.knowledge.base.model.KBArticle","inTrash":false,"positiveVotes":0,"userScore":-1.0,"randomNamespace":"zqmy___","type":"thumbs","locale":{"ISO3Country":"IRN","ISO3Language":"fas","country":"IR","displayCountry":"Iran","displayLanguage":"Persian","displayName":"Persian (Iran)","displayScript":"","displayVariant":"","extensionKeys":[],"language":"fa","script":"","unicodeLocaleAttributes":[],"unicodeLocaleKeys":[],"variant":""},"enabled":true,"url":"\/c\/portal\/rate_entry","initialLiked":false,"classPK":"7048604","initialAverageScore":0.0,"initialTotalEntries":0,"signedIn":false,"portletId":"com_liferay_knowledge_base_web_portlet_DisplayPortlet","initialNegativeVotes":0,"portletNamespace":"_com_liferay_knowledge_base_web_portlet_DisplayPortlet_","thumbUp":false}, 'ejtq'); })(); } catch (err) { console.error(err); } });AUI().use('liferay-menu', 'aui-base', function(A) {(function() {var $ = AUI.$;var _ = AUI._; if (A.UA.mobile) { Liferay.Util.addInputCancel(); } })();(function() {var $ = AUI.$;var _ = AUI._; new Liferay.Menu(); var liferayNotices = Liferay.Data.notices; for (var i = 0; i < liferayNotices.length; i++) { Liferay.Util.openToast(liferayNotices[i]); } })();}); // ]]> </script> <link data-senna-track="temporary" href="/o/product-navigation-product-menu-web/css/main.css?browserId=ie&themeId=shutheme_WAR_shutheme&minifierType=css&languageId=fa_IR&b=7307&t=1623136896000" rel="stylesheet" type="text/css" /> <link data-senna-track="temporary" href="/o/portal-search-web/css/main.css?browserId=ie&themeId=shutheme_WAR_shutheme&minifierType=css&languageId=fa_IR&b=7307&t=1732178668000" rel="stylesheet" type="text/css" /> <link data-senna-track="temporary" href="/o/com.liferay.product.navigation.user.personal.bar.web/css/main.css?browserId=ie&themeId=shutheme_WAR_shutheme&minifierType=css&languageId=fa_IR&b=7307&t=1611600602000" rel="stylesheet" type="text/css" /> <link data-senna-track="temporary" href="/o/portal-search-web/css/main.css?browserId=ie&themeId=shutheme_WAR_shutheme&minifierType=css&languageId=fa_IR&b=7307&t=1732178668000" rel="stylesheet" type="text/css" /> <link data-senna-track="temporary" href="/o/knowledge-base-web/admin/css/common.css?browserId=ie&themeId=shutheme_WAR_shutheme&minifierType=css&languageId=fa_IR&b=7307&t=1621229830000" rel="stylesheet" type="text/css" /> <link data-senna-track="temporary" href="/o/knowledge-base-web/display/css/main.css?browserId=ie&themeId=shutheme_WAR_shutheme&minifierType=css&languageId=fa_IR&b=7307&t=1621229830000" rel="stylesheet" type="text/css" /> <script src="https://ictc.sharif.ir/o/shu-theme/js/main.js?browserId=ie&minifierType=js&languageId=fa_IR&b=7307&t=1737807942000" type="text/javascript"></script> <script type="text/javascript"> // <![CDATA[ AUI().use( 'aui-base', function(A) { var frameElement = window.frameElement; if (frameElement && frameElement.getAttribute('id') === 'simulationDeviceIframe') { A.getBody().addClass('lfr-has-simulation-panel'); } } ); // ]]> </script><script type="text/javascript"> // <![CDATA[ Liferay.Loader.require('sain-analytics-support-web@1.0.0/js/index.es', function(sainAnalyticsSupportWeb100JsIndexEs) { try { (function() { var Analytics = sainAnalyticsSupportWeb100JsIndexEs; Analytics.default() })(); } catch (err) { console.error(err); } }); // ]]> </script><script type="text/javascript"> // <![CDATA[ Liferay.Loader.require('frontend-js-collapse-support-web@1.0.10/index', function(frontendJsCollapseSupportWeb1010Index) { try { (function() { var CollapseProvider = frontendJsCollapseSupportWeb1010Index; CollapseProvider.default() })(); } catch (err) { console.error(err); } }); // ]]> </script><script type="text/javascript"> // <![CDATA[ Liferay.Loader.require('frontend-js-tooltip-support-web@3.0.4/index', function(frontendJsTooltipSupportWeb304Index) { try { (function() { var TooltipSupport = frontendJsTooltipSupportWeb304Index; TooltipSupport.default() })(); } catch (err) { console.error(err); } }); // ]]> </script><script type="text/javascript"> // <![CDATA[ Liferay.Loader.require('frontend-js-alert-support-web@1.0.7/index', function(frontendJsAlertSupportWeb107Index) { try { (function() { var AlertProvider = frontendJsAlertSupportWeb107Index; AlertProvider.default() })(); } catch (err) { console.error(err); } }); // ]]> </script><script type="text/javascript"> // <![CDATA[ Liferay.Loader.require('frontend-js-dropdown-support-web@1.0.8/index', function(frontendJsDropdownSupportWeb108Index) { try { (function() { var DropdownProvider = frontendJsDropdownSupportWeb108Index; DropdownProvider.default() })(); } catch (err) { console.error(err); } }); // ]]> </script><script type="text/javascript"> // <![CDATA[ Liferay.Loader.require('frontend-js-tabs-support-web@1.0.8/index', function(frontendJsTabsSupportWeb108Index) { try { (function() { var TabsProvider = frontendJsTabsSupportWeb108Index; TabsProvider.default() })(); } catch (err) { console.error(err); } }); // ]]> </script><script type="text/javascript"> // <![CDATA[ Liferay.Loader.require('remote-app-support-web@1.0.5/index', function(remoteAppSupportWeb105Index) { try { (function() { var RemoteAppSupport = remoteAppSupportWeb105Index; RemoteAppSupport.default() })(); } catch (err) { console.error(err); } }); // ]]> </script></body> </html>