簡體   English   中英

如何編寫java web服務來進行遠程登錄?

[英]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的所有請求進行簽名。 完整解決方案需要有關架構的更多詳細信息。

您使用的是應用服務器嗎? 您的應用程序的環境是什么?

有一種使用名為Web Service Security UsernameToken Profile的Web服務傳播身份的標准。 這是一個快速概述 您可以發送用戶名/密碼或各種令牌,例如X.509證書或SAML斷言。 一些應用程序服務器Web服務堆棧將處理WSS UsernameToken Profile,JBoss,Websphere和WebLogic。 否則,Web服務代碼必須處理它。 根據您的環境,這種方法可能過於繁瑣。

有一個單點登錄標准,稱為SAML 同樣,這可能對您的用例來說太重了。

在Oracle土地上,我知道有一個受信任的應用程序的概念。 基本上如果您可以控制兩個應用程序,您可以這樣設置:

應用程序A發送應用程序B,1)應用程序A的用戶名和密碼,以及2)當前用戶的用戶名。 由於B知道並信任應用程序A,因此它不需要驗證用戶的憑據,因為它知道應用程序A已經為它執行了此操作。

我假設如果你有一個自定義應用程序B,你可能會做這樣的事情。 如果您的SSO實現支持這一點,那么除了設計您的Web服務之外,您可能不需要做很多事情。

祝好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM