[英]How to write a java web service to do remote login?
我有兩個申請。 我需要從應用程序a到應用程序b進行單點登錄。
我想使用網絡服務。 我想知道我該如何處理這種方法。
任何人都可以建議嗎?
假設這些是Web應用程序 - 您必須在應用程序之間實現某種類型的共享信任模型。
在任何情況下你都不應該自己寫。 這太容易搞砸了,有很多現有的(開放的和商業的)可供選擇。
以下是以下選項:1 - 如果每個人都在運行Windows - 您可以只使用Windows本地身份驗證(也稱為SPNEGO)2 - 您可以實現某種類型的SSO系統。 常用系統包括CAS,Oracle Access Manager,CA SiteMinder,Sun SSO和IBM Tivoli Access Manager。 雖然CAS是開源的,但其他的也允許您實現授權,而CAS只進行身份驗證。
最后 - 確保您選擇的任何選項 - 它與您的語言的本機身份驗證和授權框架集成。 在Java中,這將是JAAS。 在.NET中,它將是.NET安全框架。 對於PHP / Perl - 您可以利用Apache模塊。 這樣做的好處是,您無需成為安全專家即可輕松使用外部系統進行身份驗證和授權,而無需重新編寫應用程序代碼。
您可以使用公鑰身份驗證方案。
使用公鑰和私鑰創建密鑰對(使用Java的keytool,GNU GPG或類似的工具)。 使用私鑰對應用程序A上的一條信息(例如用戶名)進行簽名,並創建一個指向應用程序B的鏈接,該應用程序可從應用程序A訪問並包含簽名數據。 然后,應用程序B可以在使用公鑰驗證請求確實來自應用程序A(如果它能夠解密字符串時必須具有該請求)之后登錄用戶。
你當然可以創建一個相反的密鑰對來導航另一種方式,或者你可以只使用公鑰並保密(有效地使它成為一個共享秘密系統)。
如果用戶嘗試直接訪問應用程序B,您還可以將其重定向到應用程序A,其參數表明他來自應用程序B(或執行引薦來源檢查)。 如果他已經登錄到應用程序A,則使用簽名數據創建鏈接並重定向到該鏈接,否則在登錄后向他顯示登錄屏幕並重定向。
希望有所幫助!
您可以使用現有的開源產品CAS ,只需實現它而不是開發自己的產品。 這樣,您就可以與支持相同協議的其他應用程序集成。 即使您決定實施自己的代碼而不是使用他們的代碼,網站上提供的許多想法對您來說都很有用。
如果應用程序托管在同一服務器中,則可以將其配置為使用單點登錄。 例如,在Tomcat中,這是通過Valve實現的。
如果應用程序位於不同的環境中,那么安全的Web服務是個好主意。 例如,您可以創建公鑰 - 私鑰對,並在客戶端證書上使應用程序b(服務器)對應用程序(客戶端)進行身份驗證。 這意味着應用程序a將使用客戶端證書對應用程序b的所有請求進行簽名。 完整解決方案需要有關架構的更多詳細信息。
在Oracle土地上,我知道有一個受信任的應用程序的概念。 基本上如果您可以控制兩個應用程序,您可以這樣設置:
應用程序A發送應用程序B,1)應用程序A的用戶名和密碼,以及2)當前用戶的用戶名。 由於B知道並信任應用程序A,因此它不需要驗證用戶的憑據,因為它知道應用程序A已經為它執行了此操作。
我假設如果你有一個自定義應用程序B,你可能會做這樣的事情。 如果您的SSO實現支持這一點,那么除了設計您的Web服務之外,您可能不需要做很多事情。
祝好運
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.