标签 wifidog认证 下的文章

wifidog认证服务器Wiwiz Auth API集成示例代码(PHP版)

<?php

$userkey = "8C447CEAC649C9CC";  // replace with your own user key

//****************************************************
// Gets incoming parameters
//****************************************************

$pTokencode = $_REQUEST["tokencode"];   // incoming parameter "tokencode"
$pSrvurl = $_REQUEST["srvurl"];     // incoming parameter "srvurl"

session_start();
if($pTokencode != null) 
    $_SESSION['tokencode'] = $pTokencode;
if($pSrvurl != null)
    $_SESSION['srvurl'] = $pSrvurl;
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Language" content="zh">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<title> Wiwiz Auth API Usage Sample </title>
</head>
<body>

<form method="post">

User Name: <input type="text" name="username" />
<br>

Password: <input type="password" name="pswd" />
<br>

<input type="submit" name="login" value="Login" />
<br>

<?php
if(isset($_REQUEST['login'])) { // if "Login" button is clicked

    //****************************************************
    // Step 1. Do your business. E.g. check user login ... 
    //****************************************************

    $loginSuccess = false;
    //
    // Do something you need.
    // e.g. verify the user
    //      ......
    //

    $loginSuccess = true; // assume login successful

    if($loginSuccess == false) {

        echo "Login Failed!";   // if user login failed, show an error message

    } else {

        //****************************************************
        // Step 2. Do the pre-auth by calling Wiwiz Auth API
        // IMPORTANT: Do this on your server side(ASP, C#, JSP/Servlet, PHP...), 
        //            but DO NOT do this on your client side (HTML/Javascript)
        //****************************************************

        // parameter "action" : REQUIRED!
        // set it to "1" to authenticate the user
        // set it to "0" to block the user
        $action = "1";

        // parameter "tokencode": REQUIRED!
        // set identical to the incoming parameter
        $tokencode = $_SESSION['tokencode'];

        // parameter "srvurl": REQUIRED!
        // set identical to the incoming parameter  
        $srvurl = $_SESSION['srvurl'];

        // parameter "endtime" : OPTIONAL
        // Format: yyyy-mm-dd hh:MM:ss  e.g. 2012-05-31 21:39:00
        // set this parameter to set the time to close the user's Internet connection 
        // Note: the value must be url-encoded.  
        $endtime = urlencode('2012-05-31 21:39:00');

        // parameter "postauth" : OPTIONAL
        // E.g. http://www.YourDomain.com
        // set this parameter to redirect to a specified URL after authenticated.
        // Note: the value should be url-encoded.  
        $postauth = urlencode("http://www.wiwiz.com");

        $parameters = "?wiwiz_auth_api=1&ver=1.0". // parameter "wiwiz_auth_api" and "ver". Fixed value
                "&tokencode=". $tokencode . // parameter "tokencode". See above
                "&userkey=". $userkey .     // parameter "userkey". Set your own User Key
                "&action=". $action .       // parameter "action". See above
                "&endtime=". $endtime .     // parameter "endtime". See above
                "&postauth=". $postauth;    // parameter "postauth". See above

        $verifycode = file_get_contents($srvurl . $parameters); // gets "verifycode" - the verification result from Wiwiz server side

        $userstring = $_REQUEST['username'];                    // sets the Track Data (Optional), e.g. username

        if (strpos ($verifycode, "ERR") === 0) {
            // if there is an error, show error code
            echo "Error: ". $verifycode;

        } else {
            // OK, now. do Step 3.

            //****************************************************
            // Step 3. Complete the Authentication by calling Wiwiz Auth API
            //****************************************************  
            $redirectUrl = $srvurl.     // use the value of incoming parameter "srvurl" as the redirection address
                    "?wiwiz_auth_api_login=1".  // parameter "wiwiz_auth_api_login"
                    "&tokencode=". $tokencode . // parameter "tokencode", set identical to the incoming parameter   
                    "&verifycode=". $verifycode .   // parameter "verifycode", the verification result from Wiwiz server side
                    "&userstring=". $userstring;    // parameter "userstring" (Optional), the Track Data set by the user

            ob_start();
            header("Location: ". $redirectUrl); // finally, do the redirection
            ob_flush();

//          echo "<script>location.href=\"". $redirectUrl ."\"</script>";

        }

    }
}
?>

</form>

</body>
</html>

本文章由 http://www.wifidog.pro/2015/03/20/wifidog%E8%AE%A4%E8%AF%81%E6%9C%8D%E5%8A%A1%E5%99%A8PHP%E7%89%88.html 整理编辑,转载请注明出处

wifidog认证服务器Wiwiz Auth API集成示例代码(Java/JSP版)

<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>

<%@ page import="java.net.URL"%>
<%@ page import="java.net.URLConnection"%>
<%@ page import="java.net.URLEncoder"%>

<%
String userkey = "246DD22C084BB40E";    // 替换为你的User Key

//****************************************************
// 取得接收到的传入参数
//****************************************************

String pTokencode = request.getParameter("tokencode");  // 接收到的传入参数"tokencode"
String pSrvurl = request.getParameter("srvurl");        // 接收到的传入参数"srvurl"


/* 如必要,把传入参数存放于Session对象中 */
if(pTokencode != null)
    session.setAttribute("tokencode", pTokencode);
if(pSrvurl != null) 
    session.setAttribute("srvurl", pSrvurl);
%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Language" content="zh">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<title> Wiwiz Auth API使用示例 </title>
</head>
<body>

<form method="post">

用户名: <input type="text" name="username" />
<br>

密码: <input type="password" name="pswd" />
<br>

<input type="submit" name="login" value="登录" />

<%
if(request.getParameter("login") != null) { // "登录"按钮按下后的处理

    //****************************************************
    // 第1步. 根据您的具体需要或业务,进行用户登录验证处理
    //****************************************************

    boolean loginSuccess = false;
    //
    // 根据系统自身的业务需求进行自己的账户验证/登录验证等处理
    //  ......
    //

    loginSuccess = true; // 这里假设用户登录已验证

    if(loginSuccess == false) {

        out.println("登录失败!");   // 如果登录失败则报错

    } else {

        //****************************************************
        // 第2步. 调用Wiwiz Auth API,进行预认证
        // 重要: 请在服务器端的程序中进行此处理(例如,ASP、C#、JSP/Servet、PHP...),
        //      而不要在直接客户端代码中进行此处理(例如,HTML/Javascript)
        //****************************************************

        // 参数 "action" : 必须!
        // 设置为"1"将使用户认证成功
        // 设置为"0"将使用户认证失败
        String action = "1";

        // 参数 "tokencode": 必须!
        // 设置与同名传入参数相同的值
        String tokencode = (String) session.getAttribute("tokencode");

        // 参数 "srvurl": 必须!
        // 设置与同名传入参数相同的值
        String srvurl = (String) session.getAttribute("srvurl");

        // 参数 "endtime" : 可选
        // 格式: yyyy-mm-dd hh:MM:ss  例如: 2012-05-31 21:39:00
        // 设置此参数将使用户的Internet连接在指定时间关闭
        // 注意: 对此参数的值必须进行url编码  
        String endtime = URLEncoder.encode("2012-05-31 21:39:00", "utf-8");

        // 参数 "postauth" : 可选
        // 例如: http://www.YourDomain.com
        // 设置此参数将设置用户在通过认证后显示的页面地址
        // 注意: 对此参数的值应进行url编码   
        String postauth = "http://www.wiwiz.com";

        String parameters =
                "wiwiz_auth_api=1&ver=1.0"+ // 参数 "wiwiz_auth_api" 与 "ver". 固定值
                "&tokencode="+ tokencode +  // 参数 "tokencode". 设置方法参考上面的说明
                "&userkey="+ userkey +      // 参数 "userkey". 设置方法参考上面的说明
                "&action="+ action +        // 参数 "action". 设置方法参考上面的说明
                "&endtime="+ endtime +      // 参数 "endtime". 设置方法参考上面的说明
                "&postauth="+ postauth;     // 参数 "postauth". 设置方法参考上面的说明

        URL u = new URL(srvurl);            // 使用传入参数"srvurl"的值作为请求地址
        URLConnection uc = u.openConnection();
        uc.setDoOutput(true);
        uc.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
        PrintWriter pw = new PrintWriter(uc.getOutputStream());
        pw.println(parameters);
        pw.close();

        BufferedReader in = new BufferedReader(
        new InputStreamReader(uc.getInputStream()));
        String verifycode = in.readLine();  // 获取verifycode,即Wiwiz服务端返回的验证结果
        in.close();

        String userstring = "username:" + request.getParameter("username"); // 设置自定义追踪信息(可选),本例中设为用户名

        if(verifycode.startsWith("ERR")) {
            // 如果报错,则显示错误代码
            out.println("Error: "+ verifycode);

        } else {
            // 如没有报错则进行第3步。

            //****************************************************
            // 第3步. 调用Wiwiz Auth API,完成认证
            //****************************************************  
            String redirectUrl = srvurl +           // 使用传入参数"srvurl"的值作为跳转地址的前缀
                    "?wiwiz_auth_api_login=1"+      // 参数 "wiwiz_auth_api_login",固定值
                    "&tokencode="+ tokencode +      // 参数 "tokencode",设置与同名传入参数相同的值
                    "&verifycode="+ verifycode +    // 参数 "verifycode",Wiwiz服务端返回的验证结果
                    "&userstring=" + userstring;    // 参数 "userstring"(可选),用户设置的自定义追踪信息

            response.sendRedirect(redirectUrl); // 最后,进行跳转
        }
    }
}
%>

</form>

</body>
</html>

本文章由 http://www.wifidog.pro/2015/03/20/wifidog%E8%AE%A4%E8%AF%81%E6%9C%8D%E5%8A%A1%E5%99%A8java-jsp%E7%89%88.html 整理编辑,转载请注明出处

wifidog认证服务接口Wiwiz Auth API参考手册与接口规范

[功能描述]
Wiwiz Auth API是Wiwiz HotSpot Builder提供的基于Web的外部开发接口。利用它可以实现在第三方系统/用户系统进行账户认证(Web认证)后接入网络并进行简单的认证控制。

将用户系统与Wiwiz Auth API集成的过程非常简单。用户仅需了解一种Web服务器端开发语言或工具(例如,ASP,C#/VB.Net,JSP/Servlet,PHP等),并使用它根据Wiwiz Auth API的接口规范为用户系统编写一个Web程序。

如果,你已利用Wiwiz Auth API与你的系统(例如,你的网站,论坛,博客或其他系统等)进行了集成,当某个客户在你的网络中打开浏览器并访问任意的http地址时,他将会首先看到你的网络或热点的Web认证页面,即你编写的Web程序。在这个页面中,他将根据你的要求进行身份验证或登录确认等操作,并得到你的授权。之后,他才可以访问Internet。

[使用条件与要求]

  1. 用户需拥有Wiwiz专业版账户。
  2. 查询Wiwiz账户的User Key。(注3)
  3. 在Wiwiz Web面板创建一个热点,在“认证规则设置”部分设置“认证方式”为“第三方认证(调用Wiwiz Auth API)”。设置“认证URL”为你为用户系统编写的Web程序地址。(注1)
  4. 已在本地网络设备中安装并设置了Wiwiz HotSpot Builder Utility(参考Wiwiz HotSpot Builder Utility的相关安装指南)。

[调用示意图]
api_cn.png

[调用流程说明]
(1) 网络中的客户端在浏览器中访问任意http网址,将会自动启动Web认证机制,请求会被Wiwiz服务端拦截并将浏览器页面跳转至“认证URL”(*注1)”。同时,Wiwiz服务端会通过“认证URL”向用户系统传送3个HTTP GET传入参数,tokencode,srvurl与url。参数的含义如下:

1.png

(2) 在用户系统中,根据用户系统的业务需求进行自己的账户验证/登录验证等处理。即,图中的“第1步”处理。

(3) 如在用户系统中的验证处理通过,则在用户系统的服务器端调用Wiwiz Auth API以进行预认证。即,图中的“第2步”处理。

  • 调用方式为在服务器端(不是在客户端或浏览器侧)(注2)向Wiwiz服务端发起HTTP请求。请求地址为处理(1)中传入参数srvurl的值。
  • 发起请求时需要设置若干参数(HTTP GET或HTTP POST参数),包括:
    2.png

  • Wiwiz服务端接收到该请求后将返回一个Http Response作为验证结果,这个结果叫做verifycode。
    如果存在错误,verifycode的值为ERRX(X代表一位数字) (*注4)。
    否则,verifycode应该是一组16位进制的数字。

(4) 然后,再次调用Wiwiz Auth API完成认证。即,图中的“第3步”处理。

  • 调用方式为是在客户端/浏览器侧(*注5)向Wiwiz服务端发起一个HTTP请求。请求的地址为处理(1)中传入参数srvurl的值。
  • 请求的同时需要设置以下参数(HTTP GET或HTTP POST参数),包括:
    3.png

  • 最后,认证完成。浏览器将显示认证后页面或用户指定的在参数postauth中设置的地址。
    如遇到错误则显示错误页面并显示错误代码(*注6)。

[断开连接的方法]
如果需要切断某个已认证连接,可以在服务器端向Wiwiz服务端发起HTTP请求,请求的URL为:
格式:[srvurl]?disconn=2&t=[tokencode]&userkey=[userkey]
例:http://cp.wiwiz.com/as/s/login2/?disconn=2&t=A1398E284DC&userkey=246DD22C084BB40E

Wiwiz服务端接收到该请求后返回的Http Response的含义为:
4.png

[客户端用户自主断开连接的方法]
你可能希望客户端用户自己可以主动断开已认证的Internet连接。
你只需让客户端用户在浏览器访问以下网址即可:
格式:[srvurl]?disconn=1&t=[tokencode]
例:http://cp.wiwiz.com/as/s/login2/?disconn=1&t=A1398E284DC

这个访问请求成功后,其返回结果有以下3种:
5.png

[注解]
注1:“认证URL”可在Wiwiz Web面板的“热点设置”页面中设置。它就是用户根据Wiwiz Auth API的规范为用户系统写的Web程序的地址。

注2:<重要>出于安全考虑,进行预认证发起的HTTP请求一定要在服务器端程序中进行。例如,在ASP,C#/VB.Net,JSP/Servlet,PHP代码中,而不要使用HTML与Javascript在客户端发起请求。

注3:User Key可在Wiwiz Web面板的“用户菜单”->“升级选项”->“查询User Key”中查询。

注4:错误代码及错误原因:
6.png

注5:用于完成认证所发起的HTTP请求,最简单的方式是的方式是使浏览器跳转到指定地址,可使用服务器端代码通过向浏览器发送Redirect指令进行,也可使用客户端代码进行浏览器页面地址跳转,如HTML,JavaScript。

注6:错误代码及错误原因:
7.png

本文章由 http://www.wifidog.pro/2015/03/20/wifidog%E8%AE%A4%E8%AF%81%E6%9C%8D%E5%8A%A1%E6%8E%A5%E5%8F%A3.html 整理编辑,转载请注明出处

自定义wifidog 认证后跳转页面的设置

一般,当热点用户连接至该热点并成功通过认证后,将见到一个默认的认证后页面。这个页面将提示用户一些很有用的信息,如用户的原始请求地址、剩余的连接时间、连接结束时刻、热点管理员推送来的公告信息、系统提示信息及其他一些链接等。

热点管理员也可以自行制作任何式样和内容的自定义认证后页面,以满足不同的需求。在Wiwiz Web面板中(用户菜单 >> 我的热点 >> 热点设置)设置”自定义跳转URL“或”自定义HTML“后即可。之后,当热点用户连接至该热点并成功通过认证后,将见到这个热点管理员自定义的认证后页面。

我们也提供了开发接口供热点管理员在自定义认证后页面中调用,以实现和在默认认证后页面中相同的面向热点用户的提示信息。
我们提供两种接口,一种是URL参数;另一种是Javascript函数。详细的接口说明请参考以下内容。

1. URL参数:
url – 用户的原始请求地址
et – 连接结束时刻
rm – 剩余的连接时间

2. Javascript函数:
2.1. 准备工作
注意,调用Javascript函数前,
如果采用”自定义跳转URL”,则首先需要加入以下语句:

如果采用”自定义HTML”,则首先需要加入以下语句:

2.2. 可调用函数:
2.2.1. wiwizGetEndingTime() – 返回连接结束时刻。

2.2.2. wiwizGetRemaining() – 返回剩余的连接时间(秒数)。

2.2.3. wiwizShowCountdown(d, h, m, s) – 以倒计时方式显示剩余的连接时间。
参数说明: d, h, m, s分别代表日、小时、分钟、秒的分割字符。如不指定参数则使用默认分割字符。
调用用例: wiwizShowCountdown(" days ", " hours ", " minutes ", " seconds ");

2.2.4. wiwizCountdownNotice(tm, msg) – 设置倒计时提示消息。在连接结束前tm秒显示消息文本msg。
参数说明:
tm 连接结束前的秒数
msg 代表消息文本

2.2.5. wiwizGetBulletin() – 用于显示在Wiwiz Web面板编辑热点时设置的公告信息。

2.2.6. wiwizGetDisconnectLink() – 用于获取用户自主断开已认证连接的链接地址。
返回值说明:此函数将返回一个URL。此URL只可在用户的浏览器中请求,请求后的返回Response含义如下:

Response返回结果 含义
wiwiz_user_disconnect(0) 认证连接立即切断
wiwiz_user_disconnect(1) 认证连接无法立即切断,但即将会自动切断
wiwiz_user_disconnect(2) 连接不存在或已切断

使用例:

var url = wiwizGetDisconnectLink();
var script = document.createElement('script');
script.setAttribute('src', url);
document.getElementsByTagName('head')[0].appendChild(script);
function wiwiz_user_disconnect(s) {
    switch(s) {
        case 0:
            alert("The connection will shutdown immediately.");
            break;
        case 1:
            alert("The connection will shutdown in seconds.");
            break;
        case 2:
            alert("The connection does not exist or already shut down.");
            break;
    }
}

2.3. 可重写函数:
2.3.1. 调用wiwizCountdownNotice()后,提示消息将按照默认式样显示。如果你需要定制显示的方式或式样,你可以重写一个叫做wiwizUpdateNotice(str)的函数。参数str代表消息的文本。
例如:

function wiwizUpdateNotice(str) {
    alert(str); //alert the message
}

2.3.2. 调用wiwizGetBulletin()后,公告信息将按照默认式样显示。如果你需要定制显示的方式或式样,你可以重写一个叫做 wiwizUpdateBulletin(title, content)的函数。参数title代表公告的标题,content代表公告的详细内容。
例如:

function wiwizUpdateBulletin(title, content)
    alert(title + "\n" + content); //alert the bulletin
}

2.3.3. 当接近超过流量限制时,wiwizTrafficAlert()函数将会被触发调用,你可以重写它以定制你的流量限制提示。

本文章由 http://www.wifidog.pro/2015/03/20/%E8%87%AA%E5%AE%9A%E4%B9%89wifidog%E8%AE%A4%E8%AF%81%E5%90%8E%E8%B7%B3%E8%BD%AC%E9%A1%B5%E9%9D%A2%E7%9A%84%E8%AE%BE%E7%BD%AE.html 整理编辑,转载请注明出处