我想知道是否有任何简单的方法来验证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
我还没有得到这个工作。我一直忙于学期项目和其他项目。我希望能尽快仔细研究整合两种认证系统。如果我找到解决方案,我会告诉你。 –