




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、集成框架中使用CAS實現(xiàn)單點登錄技術(shù)方案1、文檔摘要31.1 文檔分類31.2 關(guān)鍵字31.3 使用SSO的最終目的31.4 摘要31.5 參考31.6 修改歷史42、技術(shù)方案5問題或場景5.webSSO的原理5CAS的基本原理6CAS協(xié)議7配置一個基本的CAS8準(zhǔn)備工作8配置CAS服務(wù)器8配置jboss服務(wù)器使用https協(xié)議9.配置cas客戶端.10測試SSO1.3擴(kuò)展認(rèn)證接口及與數(shù)據(jù)庫結(jié)合驗證13.如何做擴(kuò)展部署14如何獲取登錄的用戶名2Q.3、問題或不足214、改進(jìn)意見215、附件211、文檔摘要文檔分類技術(shù)方案-關(guān)于單點登錄關(guān)鍵字SSQYaleCAS使用SSO的最終目的1、實現(xiàn)一個易
2、用的、能跨不同Web應(yīng)用的單點登錄認(rèn)證中心;2、實現(xiàn)統(tǒng)一的用戶身份和密鑰管理,減少多套密碼系統(tǒng)造成的管理成本和安全漏洞;3、降低認(rèn)證模塊在IT系統(tǒng)設(shè)計中的耦合度,提供更好的SOA設(shè)計和更彈性的安全策略摘要本文描述如何實現(xiàn)多應(yīng)用系統(tǒng)下的單點登錄具體實現(xiàn)方案參考YaleCAS網(wǎng)站(http:/tp/cas/)及網(wǎng)絡(luò)相關(guān)技術(shù)文檔1.5修改歷史日期版本作者修改內(nèi)容評審號更改請求號2008-6-181.0許建飛創(chuàng)建2、技術(shù)方案問題或場景假設(shè)目前有多個WEB應(yīng)用系統(tǒng),采用不同的語言開發(fā),部署在不同的服務(wù)器上;每個系統(tǒng)分別管理著自己的用戶。那么,客戶在使用不同系統(tǒng)時就必須在不同的系統(tǒng)
3、之間切換,反復(fù)的輸入不同的用戶名和密碼。在系統(tǒng)集成時如何使用戶只需要認(rèn)證一次就能登入各個不同的系統(tǒng)?那么就必須采用用戶身份集中管理、統(tǒng)一認(rèn)證,這就涉及到單點登錄(singlesign-onSSO)勺問題了。webSSO的原理WebSSO主要特點是,SSO應(yīng)用之間走Web協(xié)議(如HTTP/SSL),并且SSO都只有一個登錄入口。j簡單的SSO的體系中,會有下面三種角色:User(多個)Web應(yīng)用(多個)SSO認(rèn)證中心(1個)雖然SSO實現(xiàn)模式千奇百怪,但萬變不離其宗:1、Web應(yīng)用不處理User的登錄,否則就是多點登陸了,所有的登錄都在SSO認(rèn)證中心進(jìn)行。2、SSO認(rèn)證中心通過一些方法來告訴We
4、b應(yīng)用當(dāng)前訪問用戶究竟是不是張三/李四3、SSO認(rèn)證中心和所有的Web應(yīng)用建立一種信任關(guān)系,SSO認(rèn)證中心對用戶身份正確性的判斷會通過某種方法告之Web應(yīng)用,而且判斷結(jié)果必須被Web應(yīng)用信任。CAS的基本原理從結(jié)構(gòu)體系看,CAS包含兩部分:CASServerCASServer負(fù)責(zé)完成對用戶的認(rèn)證工作,CASServer需要獨(dú)立部署,有不止一種CASServer的實現(xiàn),YaleCASServe環(huán)口ESUPCASServer都是很不錯的選擇。CASServer會處理用戶名/密碼等憑證(Credentials),它可能會到數(shù)據(jù)庫檢索一條用戶帳號信息,也可能在XML文件中檢索用戶密碼,對這種方式,CA
5、S均提供一種靈活但同一的接口/實現(xiàn)分離的方式,CAS究竟是用何種認(rèn)證方式,跟CAS協(xié)議是分離的,也就是,這個認(rèn)證的實現(xiàn)細(xì)節(jié)可以自己定制和擴(kuò)展。CASClientCASClient負(fù)責(zé)部署在客戶端(注意,我是指Web應(yīng)用),原則上,CASClient的部署意味著,當(dāng)有對本地Web應(yīng)用的受保護(hù)資源的訪問請求,并且需要對請求方進(jìn)行身份認(rèn)證,Web應(yīng)用不再接受任何的用戶名密碼等類似的Credentials,而是重定向到CASServer進(jìn)行認(rèn)證。目前,CASClient支持(某些在完善中)非常多的客戶端,包括Java、.Net、ISAPI、Php、Perl、uPortal、Acegi、Ruby、VBS
6、cript等客戶端,幾乎可以這樣說,CAS協(xié)議能夠適合任何語言編寫的客戶端應(yīng)用。CAS協(xié)議CASClient與受保護(hù)的客戶端應(yīng)用部署在一起,以Filter方式保護(hù)受保護(hù)的資源。對于訪問受保護(hù)資源的每個Web請求,CASClient會分析該請求的Http請求中是否包含ServiceTicket,如果沒有,則說明當(dāng)前用戶尚未登錄,于是將請求重定向到指定好的CASServer登錄地址,并傳遞Service(也就是要訪問的目的資源地址),以便登錄成功過后轉(zhuǎn)回該地址。用戶在第3步中輸入認(rèn)證信息,如果登錄成功,CASServer隨機(jī)產(chǎn)生一個相當(dāng)長度、唯一、不可偽造的ServiceTicket并緩存以待將來
7、驗證,之后系統(tǒng)自動重定向到Service所在地址,并為客戶端瀏覽器設(shè)置一個TicketGrantedCookie(TGC),CASClient在拿到Service和新產(chǎn)生的Ticket過后,在第5,6步中與CASServer進(jìn)行身份合適,以確保ServiceTicket的合法性。在該協(xié)議中,所有與CAS的交互均采用SSL協(xié)議,確保,ST和TGC的安全性。協(xié)議工作過程中會有2次重定向的過程,但是CASClient與CASServer之間進(jìn)行Ticket驗證的過程對于用戶是透明的。另外,CAS協(xié)議中還提供了Proxy(代理)模式,以適應(yīng)更加高級、復(fù)雜的應(yīng)用場景配置一個基本的CAS準(zhǔn)備工作下載測試用
8、的web應(yīng)用服務(wù)器apache-tomcat-6.0.16jboss-4.2.2.GA下載cas-server-3.2.1-releasecas-client-2.0.11.zip本文通過以上版本舉例說明。配置CAS服務(wù)器假設(shè)將CASserver端部署在jboss下,其他幾個客戶端應(yīng)用系統(tǒng)分別在tomcat或者jboss下。由于CAS使用Https協(xié)議,所以首先要知道如何在jboss容器中配置SSL.;CAS勺客戶端以一個Web應(yīng)用的Filter運(yùn)行。當(dāng)Web應(yīng)用的某個功能被請求時,F(xiàn)ilter就會攔截應(yīng)用的URL,從而迫使用戶到CAS服務(wù)器進(jìn)行登陸。在所有不同的Web應(yīng)用中,使用同一個CAS
9、服務(wù)器進(jìn)行登陸,即可達(dá)到單點登陸之目的。將cas-server-3.2.1-release.Zp壓,找至Ucas-server-3.2.1-release/cas-server-3.2.1/modules/cas-server-webapp-3.2.1.waS續(xù)解壓它。加解壓后的文件夾cas-server-webapp-3.2改名為cas.war為了發(fā)布到j(luò)boss下方便,tomcat下直接用這個war壓縮包就行了),啟動jboss服務(wù),測試CAS服務(wù)器是否發(fā)布正常,可以訪問http:/localhost:8080/cas/login出現(xiàn)登陸窗口。輸入用戶名密碼(用戶名=密碼),出現(xiàn)登陸成功頁
10、面說明發(fā)布正常。配置jboss服務(wù)器使用https協(xié)議1、使用Java自帶的keytool命令,產(chǎn)生SERVER的證書D:">keytool-genkey-aliasmy-alias-name-keyalgRSA-keystorekeystore-file其中my-alias-name為別名,這行命令的作用是產(chǎn)生一個新的公共/私有鑰匙對。keystore-file為存儲鑰匙和證書的文件。命令運(yùn)行后,根據(jù)提示回答。注意在開始問“你的名字”或“DName”的時候,必須填寫你服務(wù)器所在域名(在局域網(wǎng)中測試時,使用主機(jī)名或hosts文件中注冊的域名,本機(jī)可以使用localhost)。2
11、、至U這個目錄下去找server.xml文件打開,相應(yīng)位置更改如下:<Connectorport="8443"protocol="HTTP/1.1"SSLEnabled="true"maxThreads="150"scheme="https"secure="true"clientAuth="false"sslProtocol="TLS"keystoreFile="D:/keystore-file"keystor
12、ePass="*"/>其中,keystoreFile使用絕對路徑或相對路徑(如$jboss.server.home.dir/7.),keystorePas的第3點輸入的keystore密碼。3、配置完成后,啟動就jboss訪問https:/localhost:8443,訪問成功說明SSL配置成功。也可以訪問https:/localhost:8443/cas/login配置cas客戶端以Tomcat中自帶的example甑用為例,在Web應(yīng)用中使用配置CAS客戶端。1、在examples應(yīng)用里配置CAS客戶端,需修改examples/WEB-INF/web.xml,在w
13、eb.xml文件中,力口入如下Filter配置<filter><filter-name>CASFilter</filter-name><filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class><init-param><param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name><param-value>https:/localhos
14、t:8443/cas/login</param-value></init-param><init-param><param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name><param-value>https:/localhost:8443/cas/serviceValidate</param-value></init-param><init-param><param-name>edu.yale.i
15、ts.tp.cas.client.filter.serverName</param-name><param-value>localhost:8080</param-value></init-param></filter><filter-mapping><filter-name>CASFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>其中,第一,二個localhost都改成CAS服務(wù)器
16、域名或主機(jī)名,第三個改成你serveltexample5用域名或主機(jī)名,由于本文中CAS服務(wù)器與客戶端在同一主機(jī)同一Tomcat上,所以都為localhost若不在同一主機(jī),則分別使用兩主機(jī)的域名或主機(jī)名。詳細(xì)說明如下:表格1.CASFilter必需的參數(shù)參數(shù)名作用edu.yale.its.tp.cas.client.filter.loginUrl指定CAS提供登錄頁面的URLedu.yale.its.tp.cas.client.filter.validateUrl指定CAS提供serviceticket或proxyticket驗證服務(wù)的URLedu.yale.its.tp.cas.clien
17、t.filter.serverName指定客戶端的域名和端口,是指客戶端應(yīng)用所在機(jī)器而不是CASServer所在機(jī)器,該參數(shù)或serviceUrl至少有一個必須指定edu.yale.its.tp.cas.client.filter.serviceUrl該參數(shù)指定過后將覆蓋serverName參數(shù),成為登錄成功過后重定向的目的地址表格2.CASFilter可選參數(shù)參數(shù)名作用xyCallbackUrl用于當(dāng)前應(yīng)用需要作為其他服務(wù)的代理(proxy)時獲取ProxyGrantingTicket的地址edu.yale.its.t
18、p.cas.client.filter.authorizedProxy用于允許當(dāng)前應(yīng)用從代理處獲取proxytickets,該參數(shù)接受以空格分隔開的多個proxyURLs,但實際使用只需要一個成功即可。當(dāng)指定該參數(shù)過后,需要修改validateUrl至UproxyValidate,而不再是serviceValidateedu.yale.its.tp.cas.client.filter.renew如果指定為true,那么受保護(hù)的資源每次被訪問時均要求用戶重新進(jìn)行驗證,而不管之前是否已經(jīng)通過edu.yale.its.tp.cas.client.filter.wrapRequest如果指定為true
19、,那么CASFilter將重新包裝HttpRequest,并且使getRemoteUser()方法返回當(dāng)前登錄用戶的用戶名edu.yale.its.tp.cas.client.filter.gateway指定gateway屬性2、將cas-client-2.0.11.zi廨壓,把java/lib/casclient.jar拷貝至1Tomcat的webapps/examples/WEB-INF/lib目錄下(如果沒有就建一個)3、執(zhí)行命令行,導(dǎo)出SERVER的證書,用來給所有需要用到的客戶端導(dǎo)入D:">keytool-export-filemyserver.cert-aliasm
20、y-alias-name-keystorekeystore-file4、執(zhí)行命令行,在客戶端的JVM里導(dǎo)入信任的SERVER的證書,(假設(shè)你的另外一個應(yīng)用系統(tǒng)也是用的java,這一步是必須的,否則不能建立兩者之間的信任關(guān)系。如果不執(zhí)行下面的命令行,比如在.net環(huán)境下可以考慮將生成的myserver.ce柞為IE的證書倒入瀏覽器看看,需要再試一下)D:">keytool-import-keystore$JAVA_HOME/jre/lib/security/cacerts-filemyserver.cert-aliasmy-alias-name其中,$JAVA_HOME改成JDK
21、的絕對路徑。路徑當(dāng)中如果有空格用雙引號括起來。輸入keystore密碼時,注意現(xiàn)在的keystore為cacerts而cacerts的初密碼為changeit而不是前面keystore-file的密碼,所以要是沒有改過cacerts密碼應(yīng)該輸入changeit.測試SSO啟動Tomcat和jboss,訪問http:/localhost:8080/servlets-examples/,隨便執(zhí)行一個servlet,系統(tǒng)會自動跳轉(zhuǎn)到一個驗證頁面,隨便輸入一個相同的賬號,密碼,認(rèn)證通過之后,就會訪問到你點擊的servlet了。擴(kuò)展認(rèn)證接口及與數(shù)據(jù)庫結(jié)合驗證CASServer負(fù)責(zé)完成對用戶的認(rèn)證工作,它
22、會處理登錄時的用戶憑證(Credentials)信息,用戶名/密碼對是最常見的憑證信息。CASServer可能需要到數(shù)據(jù)庫檢索一條用戶帳號信息,也可能在XML文件中檢索用戶名/密碼,還可能通過LDAPServer獲取等,在這種情況下,CAS提供了一種靈活但統(tǒng)一的接口和實現(xiàn)分離的方式,實際使用中CAS采用哪種方式認(rèn)證是與CAS的基本協(xié)議分離開的,用戶可以根據(jù)認(rèn)證的接口去定制和擴(kuò)展。如何做擴(kuò)展部署擴(kuò)展AuthenticationHandlerCAS提供擴(kuò)展認(rèn)證的核心是AuthenticationHandler接口,具體可查閱源碼,看下面一段demo代碼,擴(kuò)展認(rèn)證方法publicclassUsern
23、ameLengthAuthnHandlerextendsAbstractUsernamePasswordAuthenticationHandlerprotectedbooleanauthenticateUsernamePasswordInternal(UsernamePasswordCredentialscredentials)throwsAuthenticationException/*這里我們完全可以用自己的認(rèn)證邏輯代替,比如將用戶名/密碼傳入一個SQL語句,向數(shù)據(jù)庫驗證是否有對應(yīng)的用戶賬號,只需要將下面的程序替換掉就OK了!/Stringusername=credentials.getU
24、sername();Stringpassword=credentials.getPassword();StringcorrectPassword=Integer.toString(username.length();returncorrectPassword.equals(password);完了記得在deployerConfigContext.xm中把這個bea尬冊一下,就可用了。另外,查看該xml文件發(fā)現(xiàn)注冊bean時是一個list,如下:<list><beanclass="org.jasig.cas.authentication.handler.support
25、.HttpBasedServiceCredentialsAuthenticationHandler"p:httpClient-ref="httpClient"/><!下面就是系統(tǒng)默認(rèn)的驗證器配置,你可以替換它,或者增加一個新的handler-><beanclass="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler"/></list>在這個list中可以配置多個Auth
26、enticationHandlers這些AuthenticationHandlers形成了一個驗證器鏈,所有提交給CAS的Credentials信息將通過這個驗證器鏈的鏈?zhǔn)竭^濾,只要這鏈中有一個驗證器通過了對Credentials勺驗證,就認(rèn)為這個Credentials合法的。這樣的設(shè)計使得我們可以很輕松的整合不同驗證體系的已有應(yīng)用到同一個CAS上,比如:A驗證器負(fù)責(zé)校驗alpha系統(tǒng)提交的Credentials它是基于LDAP服務(wù)器的;B驗證器負(fù)責(zé)校驗beta系統(tǒng)提交的Credentials它是一個傳統(tǒng)的RDB用戶表認(rèn)證;C驗證器負(fù)責(zé)校驗gamma系統(tǒng)提交的基于RSA證書加密的Credent
27、ials3種完全不同的用戶身份認(rèn)證通過配置就可以統(tǒng)一在同一個CAS服務(wù)內(nèi)JDBC認(rèn)證方法用戶的認(rèn)證信息通常保存在數(shù)據(jù)庫中,因此本文就選用這種情況來介紹。將前面下載的cas-server-3.1.1-release.zip解開后,在modules目錄下可以找到包cas-server-support-jdbc-3.1.1.ja其提供了通過JDBC連接數(shù)據(jù)庫進(jìn)行驗證的缺省實現(xiàn),基于該包的支持,我們只需要做一些配置工作即可實現(xiàn)JDBC認(rèn)證。JDBC認(rèn)證方法支持多種數(shù)據(jù)庫,DB2,Oracle,MySql,MicrosoftSQLServer等均可,這里以oraclelO作為例子介紹。并且假設(shè)oracl
28、eSID為:mytest,數(shù)據(jù)庫登錄用戶名:mytest,數(shù)據(jù)庫登錄密碼:oracle,用戶信息表為:app_useg該表包含用戶名和密碼的兩個數(shù)據(jù)項分別為userName和password如下:我們測試使用的是oracle數(shù)據(jù)庫,可以選用任何一個支持JDBC的數(shù)據(jù)庫。用scott/tiger登陸sqlplus輸入如下語句創(chuàng)建用戶表和輸入測試數(shù)據(jù):createtableapp_user(usernamevarchar(100),passwordvarchar(100);insertintoapp_uservalues('tomcat','tomcat');ins
29、ertintoapp_uservalues('cas','cas');commit;打開deployerConfigContext.xm文件,開始配置.配置DataStore<!-add配置數(shù)據(jù)庫聯(lián)接-><beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"destroy-method="close"><propertyname="driverC
30、lassName"><value>oracle.jdbc.driver.OracleDriver</value></property><propertyname="url"><value>jdbc:oracle:thin::1521:mytest</value></property><propertyname="username"><value>mytest</value></property&g
31、t;<propertyname="password"><value>oracle</value></property></bean><!-addend->.酉己置AuthenticationHandler在cas-server-support-jdbc-3.1.1.j葩中,提供了3個基于JDBC的AuthenticationHandler,分另U為BindModeSearchDatabaseAuthenticationHandler,QueryDatabaseAuthenticationHandler,
32、SearchModeSearchDatabaseAuthenticationHancUe其中BindModeSearchDatabaseAuthenticationHandler是用所給的用戶名和密碼去建立數(shù)據(jù)庫連接,根據(jù)連接建立是否成功來判斷驗證成功與否;QueryDatabaseAuthenticationHandle通過酉己置個SQL語句查出密碼,與所給密碼匹配;SearchModeSearchDatabaseAuthenticationHandler®過配置存放用戶驗證信息的表、用戶名字段和密碼字段,構(gòu)造查詢語句來驗證。使用哪個AuthenticationHandler,需要
33、在deployerConfigContext.xml中設(shè)置,默認(rèn)情況下,CAS使用一個簡單的username=password的AuthenticationHandler(就是第2.5章節(jié)所談到的配置),在文件中可以找到如下一行:<beanclass="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler"/>,我們可以將其注釋掉,換成我們希望的一個AuthenticationHandler,比如,使用QueryDatabaseAu
34、thenticationHandler或SearchModeSearchDatabaseAuthenticationHandler可以分別選取下面兩個清單的配置。使用QueryDatabaseAuthenticationHandler<beanclass="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"><propertyname="sql"value="selectpasswordfromapp_userwhereusername=?"
35、/><propertyname="dataSource"ref="dataSource"/><bean>使用SearchModeSearchDatabaseAuthenticationHandler1IIII<beanid="SearchModeSearchDatabaseAuthenticationHandler"Iiclass="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationIHandler"
36、;abstract="false"singleton="true"lazy-init="defa3t”IIautowire="default"dependency-check="default”>I<propertyname="tableUsers”>I;<value>app_user</value></property>i<propertyname="fieldUser”>i<value>userName</v
37、alue>I</property>i<propertyname=''fieldPassword"><value>password</value></property>1<propertyname="dataSource"ref="casDataSource”/>i</bean>另外,由于存放在數(shù)據(jù)庫中的密碼通常是加密過的,所以AuthenticationHandler在匹配時需要知道使用的加密方法,在deployerConfigContext.xml
38、文件中我們可以為具體的AuthenticationHandler類配置個property,指定力口密器類,比如對于QueryDatabaseAuthenticationHandler,可以修改所示:添力口passwordEncoder<beanclass="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"><propertyname="dataSource"ref="casDataSource"/><propertyname=&
39、quot;sql"value="selectpasswordfromapp_userwherelower(userName)=lower(?)"/><propertyname="passwordEncoder"ref="myPasswordEncoder"/></bean>其中myPasswordEncoder是對如下清單中設(shè)置的實際加密器類的引用:指定具體加密器類這里MyPasswordEncoder是根據(jù)實際情況自己定義的加密器,實現(xiàn)PasswordEncoder接口及其encode()方法。熟悉spring的人應(yīng)該相當(dāng)對上面的配置感到很親切,因為CAS3也已經(jīng)aop,配置都是基于SPRING的方式。4、部署依賴包在以上配置完成以后,需要拷貝幾個依賴的包到cas應(yīng)用下,包括:?將cas-server-supp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位房屋租賃合同書
- 2025西安美術(shù)學(xué)院輔導(dǎo)員考試試題及答案
- 2025遼寧理工學(xué)院輔導(dǎo)員考試試題及答案
- 2025鹽城工業(yè)職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試試題及答案
- 2025赤峰學(xué)院輔導(dǎo)員考試試題及答案
- 2025福建水利電力職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試試題及答案
- 江蘇蘇州凌曄進(jìn)出口有限公司招聘筆試題庫2025
- 內(nèi)蒙古賽一建建筑工程有限公司招聘筆試題庫2025
- 四川綿陽愛聯(lián)科技股份有限公司招聘筆試題庫2025
- 社區(qū)矯正集中教育
- (五調(diào))武漢市2025屆高三年級五月模擬訓(xùn)練生物試卷(含答案)
- 安全生產(chǎn)月活動查找身邊安全隱患人人講安全個個會應(yīng)急課件
- 江蘇省啟東市高中數(shù)學(xué) 第二章 平面向量 第6課時 2.3.2 向量的坐標(biāo)表示(1)教案 蘇教版必修4
- 社會主義發(fā)展簡史智慧樹知到課后章節(jié)答案2023年下北方工業(yè)大學(xué)
- 用TOC理論提高生產(chǎn)制造的競爭力課件
- SketchUp (草圖大師) 基礎(chǔ)培訓(xùn)PPT課件
- 生命線安裝方案
- 代理機(jī)構(gòu)服務(wù)質(zhì)量考核評價表
- 電廠保安人員管理制度
- 2018年瀘州市生物中考試題含答案
- ge核磁共振機(jī)房專用精密空調(diào)機(jī)技術(shù)要求
評論
0/150
提交評論