我想知道是否有任何簡單的方法來驗證Openfire用戶對我現有的ASP.NET成員資格?我看到Openfire有一個自定義的數據庫集成指南here 但我不認爲它支持我目前的密碼安全方法。顯然,我的一些成員有類型1,一些有類型2密碼安全。我不確定發生了什麼,但由於它們不一致,我不能使用Openfire的預設密碼安全選項之一。我需要查詢我的數據庫以確定密碼的存儲方式,然後根據類型應用正確的密碼驗證方法。有什麼建議麼?驗證Ignite Openfire用戶是否符合ASP.NET成員身份?
回答
因此,實際上並不難。您需要創建三個新的Java文件,每個操作:
- 一個實現AdminProvider.java(如果你想從IIS數據庫管理員拉)
- 一個實現UserProvider.java(從IIS列出所有/活躍用戶)
- 一個實現AuthProvider.java(實際做認證)
實施管理provdier和用戶提供的straightfoward,只需按照所提供的JDBC例子。需要注意的一點是,IIS數據庫的鍵是某些GUID,而實際的用戶帳戶字段(電子郵件,名稱等)位於不同的表中,因此您必須執行查詢以確定IIS ID ,然後用它來計算其餘的帳戶字段,即。
SELECT TOP 1 UserId FROM dbo.aspnet_Users WHERE LoweredUserName = ?
然後獲得電子郵件(你有IIS ID後)
SELECT TOP 1 Email FROM dbo.aspnet_Membership WHERE UserId = ?
做實際的認證是很容易的,只需要通過Openfire的提供給您的用戶名,清理它(有時候是用戶@主機 - @主機部分不是用戶名的一部分),並根據用戶名給出IIS ID。
然後,你可以做一個查詢找出密碼&密碼哈希
SELECT TOP 1 Password, PasswordSalt FROM dbo.aspnet_Membership WHERE UserId = ?
有了,你有你需要加密給了給您的密碼 - 這裏的算法:
注 - 所有的utils的的附帶的Openfire(即decodeHex(...)
,Base64...
。)
private static String encryptPassword(String password, String salt)
{
if(password == null || salt == null)
return "";
try
{
byte[] bytes = password.getBytes("UTF-16LE");
byte[] src = Base64.decode(salt);
byte[] dst = new byte[src.length + bytes.length];
System.arraycopy(src, 0, dst, 0, src.length);
System.arraycopy(bytes, 0, dst, src.length, bytes.length);
// Calculate the SHA1
byte[] hashed = StringUtils.decodeHex(StringUtils.hash(dst, "SHA-1"));
return Base64.encodeBytes(hashed);
}
catch (UnsupportedEncodingException e)
{
Log.error("UTF-16LE encoding not suported");
}
return "";
}
只需將此功能的結果與IIS數據庫的密碼字段進行比較,即可關閉並運行。
管理提供者需要注意的另一件事情是:openfire使用的AdminManager會緩存結果。它看起來像系統啓動時緩存結果 - 所以它不可能保持管理員列表與IIS同步。我仍然在研究那個最好的方法。我可能只是一起刪除緩存(AdminManager只是持有內存中的管理員列表。)
一旦你得到了一切設置,只需要改變配置中openfire的一些屬性,將它連接到你的解決方案,例如。
provider.admin.className --> org.jivesoftware.openfire.admin.IISAdminProvider
provider.auth.className --> org.jivesoftware.openfire.auth.IISAuthProvider
provider.user.className --> org.jivesoftware.openfire.user.IISUserProvider
我增加了對IIS數據庫的用戶名/密碼,多了一些特性,以及什麼我的管理組的名稱是一些變量,等等只要按照JDBC的例子,這是非常容易的。請注意,在openfire配置中更改provider.*
屬性後,您將無法再使用默認管理員登錄 - 如果出現問題,您將不得不返回數據庫並更改配置(在dbo.ofProperty
)
我想知道您是否可以發佈一些鏈接,瞭解如何實施提供商以及您找到樣品的文檔。不知道你是否願意分享你的源代碼,但網上沒有很多好的例子,我還沒有找到任何有關這方面的全面文檔。 –
我只是在網上發佈代碼 - 但不幸的是我寫了它的工作,所以它不是真的發佈。我只是跟着OpenFire網站上的文檔以及我在文章中提到的文件。這並不困難 - 最難的部分是將明文密碼轉換爲可與IIS數據庫進行比較的密碼,所以我在此處發佈該代碼... – debracey
您能否提供有關文檔的鏈接?將不勝感激! –
- 1. Asp.net成員身份驗證
- 2. openfire外部用戶身份驗證
- 3. 檢查用戶是否在OpenFire中進行了身份驗證
- 4. 用asp.net成員身份登錄跨域身份驗證
- 5. 使用PHP驗證ASP.NET成員身份的用戶
- 6. 驗證組成員身份
- 7. ASP.NET身份或ASP.NET成員身份?
- 8. ASP.NET混合身份驗證
- 9. Facebook身份驗證和Asp.Net成員身份
- 10. ASP.NET成員身份與SQL身份驗證
- 11. ASP.NET成員身份角色和身份驗證的缺點?
- 12. 在MVC應用程序中結合ASP.NET成員身份驗證和HTTP驗證
- 13. Yii身份驗證使用「成員」表而不是「用戶」表
- 14. 使用Owin OpenId身份驗證混合Owin Asp.Net身份Cookie身份驗證
- 15. 是否可以在asp.net身份驗證中禁用雙因素身份驗證?
- 16. ASP.NET:表單身份驗證和成員身份之間的連接是什麼?
- 17. asp.net會員 - sql身份驗證
- 18. ASP.NET MVC用戶身份驗證
- 19. ASP.NET IIS用戶角色身份驗證
- 20. Asp.net用戶身份驗證和授權
- 21. ASP.NET中的用戶身份驗證
- 22. asp.net身份驗證和用戶數據
- 23. 如何在Ignite Openfire上針對包含用戶的MongoDB實例對用戶進行身份驗證?
- 24. Jabber Openfire服務器v3.6.0a + - 如何使用混合身份驗證?
- 25. Jabber Openfire服務器v3.6.0a + - 如何使用混合身份驗證?
- 26. ASP.NET身份驗證
- 27. ASP.NET身份驗證
- 28. ASP.net身份驗證
- 29. 禁用SQL成員提供程序(ASP.Net Forms身份驗證)
- 30. 身份驗證授權ASP/NET MVC 3使用成員身份
我想我要做的是嘗試和轉換所有加密的密碼用戶使用散列密碼,因爲我無法轉換另一種方式,因爲散列無法解密。由於ASP.NET使用SHA1來對密碼和鹽進行哈希處理,理論上我應該能夠檢查SHA1哈希值和salt是否爲用戶的密碼。我將更多地使用這些數據,看看會發生什麼。 –
你能夠得到這個工作? – debracey
我還沒有得到這個工作。我一直忙於學期項目和其他項目。我希望能儘快仔細研究整合兩種認證系統。如果我找到解決方案,我會告訴你。 –