• XMPP Openfire集成windows身份认证


    OpenFire可以很方便的集成已有数据库类别的系统的用户认证,通常的应用中还会遇到和Windows的身份认证集成,下面对方法总结一下:

    一、集成本地Windows用户管理

    此方法用openfire本身已经实现的NativeAuthProvider类进行验证,设置步骤如下:

    1. 安装openfire 3.7.0;

    2. 将openfire_3_7_0\openfire\resources\nativeAuth\win32-x86\下的shaj.dll文件复制到Java\jdk1.6.0_23\bin\下;

    3. 运行openfire.exe;

    4. 点击Launch Admin,配置好后,在打开的浏览器中输入正确的管理员帐户和密码,登录;

    5. 在“服务器—服务器管理器—系统属性”中,将“provider.auth.className”的属性值修改为“org.jivesoftware.openfire.auth.NativeAuthProvider”并保存属性

    6. 至此,再登录openfire服务器必须用正确的本机windows用户名及密码。由于默认只有用户名admin为管理员,建议在windows下新建admin用户或增加openfire的管理员帐户。

    二、集成Windows AD

    通过JAAS的开源库,我们也可以自己实现一个AD认证的Provider

    1. 下载waffle http://waffle.codeplex.com/

    2、编译Provider的实现类并包含guava-r07.jar、jna.jar、platform.jar、waffle-jna.jar,形成一个jar包,并复制到openfire_3_7_0\openfire\lib下

    3、Openfire的provider.auth.className设置为我们实现的类即可

    具体的实现如下

    import waffle.windows.auth.impl.WindowsAuthProviderImpl;

    public class NTLMAuthProvider implements AuthProvider {
        private static final Logger Log = LoggerFactory.getLogger(NTLMAuthProvider.class);

        public NTLMAuthProvider() {

        }
        public void authenticate(String username, String password) throws UnauthorizedException {
            if (username.contains("@")) {
                // Check that the specified domain matches the server's domain
                int index = username.indexOf("@");
                String domain = username.substring(index + 1);
                if (domain.equals(XMPPServer.getInstance().getServerInfo().getXMPPDomain())) {
                    username = username.substring(0, index);
                } else {
                    // Unknown domain. Return authentication failed.
                    throw new UnauthorizedException();
                }
            }
            try {
                WindowsAuthProviderImpl wapi=new WindowsAuthProviderImpl();
                wapi.logonUser(username,password);
            }
            catch (Exception e) {
                throw new UnauthorizedException(e);
            }
        }

        public void authenticate(String username, String token, String digest) throws UnauthorizedException {
            throw new UnsupportedOperationException();
        }

        public boolean isPlainSupported() {
            return true;
        }

        public boolean isDigestSupported() {
            return false;
        }

        public String getPassword(String username) throws UserNotFoundException, UnsupportedOperationException {      
            throw new UnsupportedOperationException();
        }

        public void setPassword(String username, String password) throws UserNotFoundException {
            throw new UnsupportedOperationException();
        }

        public boolean supportsPasswordRetrieval() {
            return false;
        }
    }

    关键解读

    以上的实现主要就是依据Java的JAAS规范,然后读取Windows账户和AD服务信息,实现用户的验证。

  • 相关阅读:
    GitHub 如何创建 Access Token
    Fact Table 数据表什么意思
    高基数数据特性是什么意思
    Edge 浏览器的隐藏 URL QR 生成器
    Apache Druid 安装的时候进行 Java 版本校验没有输出
    Apache Druid 简介
    如何在 Discourse 中批量移动主题到不同的分类中
    素材
    Drawable转bitmap
    Drawable与 Bitmap 转换总结
  • 原文地址:https://www.cnblogs.com/2018/p/2296389.html
Copyright © 2020-2023  润新知