欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
編寫(xiě)你自己的單點(diǎn)登錄(SSO)服務(wù) 3

編寫(xiě)你自己的單點(diǎn)登錄(SSO)服務(wù) 3

6 桌面SSO的實(shí)現

WEB-SSO的概念延伸開(kāi),我們可以把SSO的技術(shù)拓展到整個(gè)桌面的應用,不僅僅局限在瀏覽器。SSO的概念和原則都沒(méi)有改變,只需要再做一點(diǎn)點(diǎn)的工作,就可以完成桌面 SSO 的應用。

桌面SSOWEB-SSO一樣,關(guān)鍵的技術(shù)也在于如何在用戶(hù)登錄過(guò)后保存登錄的憑據。在WEB-SSO中,登錄的憑據是靠瀏覽器的cookie機制來(lái)完成的;在桌面應用中,可以將登錄的憑證保存到任何地方,只要所有SSO的桌面應用都共享這個(gè)憑證。

從網(wǎng)站可以下載一個(gè)簡(jiǎn)單的桌面SSO的樣例(http://gceclub.sun.com.cn/wangyu/desktop-sso/desktopsso.zip)和全部源碼(http://211.151.94.21/blog/yutoujava/resource/desktopsso_src.zip),雖然簡(jiǎn)單,但是它具有桌面SSO大多數的功能,稍微加以擴充就可以成為自己的解決方案。



    6.1桌面樣例的部署

  1. 運行此桌面SSO需要三個(gè)前提條件:
    a) WEB-SSO
    的身份認證應用應該正在運行,因為我們在桌面SSO當中需要用到統一的認證服務(wù)
    b)
    當前桌面需要運行MozillaNetscape瀏覽器,因為我們將ticket保存到mozillacookie文件中
    c)
    必須在JDK1.4以上運行。(WEB-SSO需要JDK1.5以上)

  2. 解開(kāi)desktopsso.zip文件,里面有兩個(gè)目錄binlib。

  3. bin目錄下有一些腳本文件和配置文件,其中config.properties包含了三個(gè)需要配置的參數:
    a) SSOServiceURL
    要指向WebSSO部署的身份認證的URL
    b) SSOLoginPage
    要指向WebSSO部署的身份認證的登錄頁(yè)面URL
    c) cookiefilepath
    要指向當前用戶(hù)的mozilla所存放cookie的文件

  4. bin目錄下還有一個(gè)login.conf是用來(lái)配置JAAS登錄模塊,本樣例提供了兩個(gè),讀者可以任意選擇其中一個(gè)(也可以都選),再重新運行程序,查看登錄認證的變化

  5. bin下的運行腳本可能需要作相應的修改
    a)
    如果是在unix下,各個(gè)jar文件需要用“:”來(lái)隔開(kāi),而不是“;”
    b) java
    運行程序需要放置在當前運行的路徑下,否則需要加上java的路徑全名。



    6.2桌面樣例的運行

樣例程序包含三個(gè)簡(jiǎn)單的Java控制臺程序,這三個(gè)程序單獨運行都需要登錄。如果運行第一個(gè)命叫“GameSystem”的程序,提示需要輸入用戶(hù)名和密碼:



效驗成功以后,便會(huì )顯示當前登錄的用戶(hù)的基本信息等等。





這時(shí)候再運行第二個(gè)桌面Java應用(mailSystem)的時(shí)候,就不需要再登錄了,直接就顯示出來(lái)剛才登錄的用戶(hù)。



第三個(gè)應用是logout,運行它之后,用戶(hù)便退出系統。再訪(fǎng)問(wèn)的時(shí)候,又需要重新登錄了。請讀者再制裁執行完logout之后,重新驗證一下前兩個(gè)應用的SSO:先運行第二個(gè)應用,再運行第一個(gè),會(huì )看到相同的效果。

我們的樣例并沒(méi)有在這里停步,事實(shí)上,本樣例不僅能夠和在幾個(gè)Java應用之間SSO,還能和瀏覽器進(jìn)行SSO,也就是將瀏覽器也當成是桌面的一部分。這對一些行業(yè)有著(zhù)不小的吸引力。

這時(shí)候再打開(kāi)Mozilla瀏覽器,訪(fǎng)問(wèn)以前提到的那兩個(gè)WEB應用,會(huì )發(fā)現只要桌面應用如果登錄過(guò),Web應用就不用再登錄了,而且能顯示剛才登錄的用戶(hù)的信息。讀者可以在幾個(gè)桌面和Web應用之間進(jìn)行登錄和logout的試驗,看看它們之間的SSO。



    6.3桌面樣例的源碼分析

    桌面SSO的樣例使用了JAAS(要了解JAAS的詳細的信息請參考http://java.sun.com/products/jaas)。JAAS是對PAMPluggable Authentication Module)的Java實(shí)現,來(lái)完成 Java應用可插拔的安全認證模塊。使用JAAS作為Java應用的安全認證模塊有很多好處,最主要的是不需要修改源代碼就可以更換認證方式。例如原有的Java應用如果使用JAAS的認證,如果需要應用SSO,只需要修改JAAS的配置文件就行了?,F在在流行的J2EE和其他 Java的產(chǎn)品中,用戶(hù)的身份認證都是通過(guò)JAAS來(lái)完成的。在樣例中,我們就展示了這個(gè)功能。請看配置文件login.conf

    DesktopSSO {               desktopsso.share.PasswordLoginModule required;               desktopsso.share.DesktopSSOLoginModule required;            };

當我們注解掉第二個(gè)模塊的時(shí)候,只有第一個(gè)模塊起作用。在這個(gè)模塊的作用下,只有test用戶(hù)(密碼是12345)才能登錄。當我們注解掉第一個(gè)模塊的時(shí)候,只有第二個(gè)模塊起作用,桌面SSO才會(huì )起作用。



所有的Java桌面樣例程序都是標準JAAS應用,熟悉JAAS的程序員會(huì )很快了解。JAAS中主要的是登錄模塊(LoginModule)。下面是SSO登錄模塊的源碼:

 public class DesktopSSOLoginModule implements LoginModule {               ..........               private String SSOServiceURL = "";               private String SSOLoginPage = "";                private static String cookiefilepath = "";                  .........


config.properties的文件中,我們配置了它們的值:

SSOServiceURL=http://wangyu.prc.sun.com:8080/SSOAuth/SSOAuth            SSOLoginPage=http://wangyu.prc.sun.com:8080/SSOAuth/login.jsp            cookiefilepath=C:\\Documents and Settings\\yw137672\\Application Data\\Mozilla\\Profiles\\default\\hog6z1ji.slt\\cookies.txt

SSOServiceURLSSOLoginPage成員變量指向了在Web-SSO中用過(guò)的身份認證模塊:SSOAuth,這就說(shuō)明在桌面系統中我們試圖和Web應用共用一個(gè)認證服務(wù)。而 cookiefilepath成員變量則泄露了一個(gè)“天機”:我們使用了Mozilla瀏覽器的cookie文件來(lái)保存登錄的憑證。換句話(huà)說(shuō),和Mozilla共用了一個(gè)保存登錄憑證的機制。之所以用Mozilla是應為它的Cookie文件格式簡(jiǎn)單,很容易編程訪(fǎng)問(wèn)和修改任意的Cookie值。(我試圖解析Internet Explorercookie文件但沒(méi)有成功。)

下面是登錄模塊DesktopSSOLoginModule的主體:login()方法。邏輯也是非常簡(jiǎn)單:先用Cookie來(lái)登陸,如果成功,則直接就進(jìn)入系統,否則需要用戶(hù)輸入用戶(hù)名和密碼來(lái)登錄系統。

    public boolean login() throws LoginException{                    try {                        if (Cookielogin()) return true;                    } catch (IOException ex) {                        ex.printStackTrace();                    }                  if (passwordlogin()) return true;                  throw new FailedLoginException();              }



下面是Cookielogin()方法的實(shí)體,它的邏輯是: 先從Cookie文件中獲得相應的Cookie值,通過(guò)身份效驗服務(wù)效驗Cookie的有效性。如果cookie有效就算登錄成功;如果不成功或Cookie不存在,用cookie登錄就算失敗。

    public boolean Cookielogin() throws LoginException,IOException {                  String  cookieValue="";                  int cookieIndex =foundCookie();                  if (cookieIndex<0)                         return false;                  else                         cookieValue = getCookieValue(cookieIndex);                 username = cookieAuth(cookieValue);                  if (! username.equals("failed")) {                     loginSuccess =  true;                     return true;                 }                 return false;              }





用用戶(hù)名和密碼登錄的方法要復雜一些,通過(guò)Callback的機制和屏幕輸入輸出進(jìn)行信息交互,完成用戶(hù)登錄信息的獲??;獲取信息以后通過(guò)userAuth方法來(lái)調用遠端SSOAuth的服務(wù)來(lái)判定當前登錄的有效性。

   public boolean passwordlogin() throws LoginException {                //                // Since we need input from a user, we need a callback handler                if (callbackHandler == null) {                   throw new LoginException("No CallbackHandler defined");                }                Callback[] callbacks = new Callback[2];                callbacks[0] = new NameCallback("Username");                callbacks[1] = new PasswordCallback("Password", false);                //                // Call the callback handler to get the username and password                try {                  callbackHandler.handle(callbacks);                  username = ((NameCallback)callbacks[0]).getName();                  char[] temp = ((PasswordCallback)callbacks[1]).getPassword();                  password = new char[temp.length];                  System.arraycopy(temp, 0, password, 0, temp.length);                  ((PasswordCallback)callbacks[1]).clearPassword();                } catch (IOException ioe) {                  throw new LoginException(ioe.toString());                } catch (UnsupportedCallbackException uce) {                  throw new LoginException(uce.toString());                }                                System.out.println();                String authresult ="";                try {                    authresult = userAuth(username, password);                } catch (IOException ex) {                    ex.printStackTrace();                }                if (! authresult.equals("failed")) {                    loginSuccess= true;                    clearPassword();                    try {                        updateCookie(authresult);                    } catch (IOException ex) {                        ex.printStackTrace();                    }                    return true;                }                                             loginSuccess = false;                username = null;                clearPassword();                System.out.println( "Login: PasswordLoginModule FAIL" );                throw new FailedLoginException();              }              



CookieAuthuserAuth方法都是利用apahcehttpclient工具包和遠程的SSOAuth進(jìn)行http連接,獲取服務(wù)。

        private String cookieAuth(String cookievalue) throws IOException{                    String result = "failed";                                        HttpClient httpclient = new HttpClient();                           GetMethod httpget = new GetMethod(SSOServiceURL+Action1+cookievalue);                                    try {                        httpclient.executeMethod(httpget);                        result = httpget.getResponseBodyAsString();                    } finally {                        httpget.releaseConnection();                    }                    return result;                }            private String userAuth(String username, char[] password) throws IOException{                    String result = "failed";                    String passwd= new String(password);                    HttpClient httpclient = new HttpClient();                           GetMethod httpget = new GetMethod(SSOServiceURL+Action2+username+"&password="+passwd);                    passwd = null;                                    try {                        httpclient.executeMethod(httpget);                        result = httpget.getResponseBodyAsString();                    } finally {                        httpget.releaseConnection();                    }                    return result;                                    }



還有一個(gè)地方需要補充說(shuō)明的是,在本樣例中,用戶(hù)名和密碼的輸入都會(huì )在屏幕上顯示明文。如果希望用掩碼形式來(lái)顯示密碼,以提高安全性,請參考:http://java.sun.com/developer/technicalArticles/Security/pwordmask/

7 真正安全的全方位SSO解決方案:Kerberos

我們的樣例程序(桌面SSOWEB-SSO)都有一個(gè)共性:要想將一個(gè)應用集成到我們的SSO解決方案中,或多或少的需要修改應用程序。Web應用需要配置一個(gè)我們預制的filter;桌面應用需要加上我們桌面SSOJAAS模塊(至少要修改JAAS的配置文件)??墒怯泻芏喑绦蚴菦](méi)有源代碼和無(wú)法修改的,例如常用的遠程通訊程序telnetftp等等一些操作系統自己帶的常用的應用程序。這些程序是很難修改加入到我們的SSO的解決方案中。

事實(shí)上有一種全方位的SSO解決方案能夠解決這些問(wèn)題,這就是Kerberos協(xié)議(RFC 1510)。Kerberos是網(wǎng)絡(luò )安全應用標準(http://web.mit.edu/kerberos/),由MIT學(xué)校發(fā)明,被主流的操作系統所采用。在采用kerberos的平臺中,登錄和認證是由操作系統本身來(lái)維護,認證的憑證也由操作系統來(lái)保存,這樣整個(gè)桌面都可以處于同一個(gè)SSO的系統保護中。操作系統中的各個(gè)應用(如ftp,telnet)只需要通過(guò)配置就能加入到SSO中。另外使用Kerberos最大的好處在于它的安全性。通過(guò)密鑰算法的保證和密鑰中心的建立,可以做到用戶(hù)的密碼根本不需要在網(wǎng)絡(luò )中傳輸,而傳輸的信息也會(huì )十分的安全。

目前支持Kerberos的操作系統包括Solaris, windows,Linux等等主流的平臺。只不過(guò)要搭建一個(gè)Kerberos的環(huán)境比較復雜,KDC(密鑰分發(fā)中心)的建立也需要相當的步驟。Kerberos擁有非常成熟的API,包括JavaAPI。使用Java Generic Security Services(GSS) API并且使用JAAS中對Kerberos的支持(詳細信息請參見(jiàn)SunJava&Kerberos教程http://java.sun.com/ j2se/1.5.0/docs/guide/security/jgss/tutorials/index.html),要將我們這個(gè)樣例改造成對Kerberos的支持也是不難的。值得一提的是在JDK6.0 http://www.java.net/download/jdk6)當中直接就包含了對GSS的支持,不需要單獨下載GSS的包。



8 總結

本文的主要目的是闡述SSO的基本原理,并提供了一種實(shí)現的方式。通過(guò)對源代碼的分析來(lái)掌握開(kāi)發(fā)SSO服務(wù)的技術(shù)要點(diǎn)和充分理解SSO的應用范圍。但是,本文僅僅說(shuō)明了身份認證的服務(wù),而另外一個(gè)和身份認證密不可分的服務(wù)----權限效驗,卻沒(méi)有提到。要開(kāi)發(fā)出真正的SSO的產(chǎn)品,在功能上、性能上和安全上都必須有更加完備的考慮。

附件:

作者簡(jiǎn)介

王昱是Sun中國工程研究院的Java工程師,現在的主要負責全球合作伙伴的技術(shù)支持。作為一名Java資深工程師和架構師,王昱在Java 的很多領(lǐng)域都有多年的造詣,特別是在Java虛擬機、J2EE技術(shù)(包括EJB, JSP/Servlet, JMSWeb services等技術(shù))、集群技術(shù)和Java應用性能調優(yōu)上有著(zhù)較為豐富的經(jīng)驗。曾經(jīng)多次在重要的Java會(huì )議發(fā)表演講,并在國際著(zhù)名的Java技術(shù)站點(diǎn)發(fā)表文章。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
雜談單點(diǎn)登陸以及相關(guān)技術(shù)
編寫(xiě)你自己的單點(diǎn)登錄(SSO)服務(wù)
tomcat下jaas配置實(shí)例
JAAS簡(jiǎn)介及實(shí)例
WebSphere環(huán)境下的SSO(Single sign-on:?jiǎn)吸c(diǎn)登錄、全網(wǎng)漫游)實(shí)現之...
JavaEye - portal sso
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久