wifidog认证Wiwiz Auth API集成示例代码(ASP.Net)
WiwizAuthApiSample.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WiwizAuthApiSample_aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
用户名: <asp:TextBox ID="username" runat="server"></asp:TextBox>
<br />
密码: <asp:TextBox ID="pswd" runat="server" TextMode="Password"></asp:TextBox>
<br />
<asp:Button ID="login" runat="server" onclick="Login_Click" Text="登录" />
<br />
<asp:Label ID="LabelMsg" runat="server" Text=""></asp:Label>
<br />
</form>
</body>
</html>
WiwizAuthApiSample_aspx.cs:
using System;
using System.IO;
using System.Text;
using System.Web;
using System.Net;
public partial class _Default : System.Web.UI.Page
{
string userkey = "246DD22C084BB40E"; // 替换为你的User Key
protected void Page_Load(object sender, EventArgs e)
{
//****************************************************
// 取得接收到的传入参数
//****************************************************
Session.Add("tokencode", Request.Params["tokencode"]); // 接收到的传入参数"tokencode"
Session.Add("srvurl", Request.Params["srvurl"]); // 接收到的传入参数"srvurl"
}
protected void Login_Click(object sender, EventArgs e)
{
//****************************************************
// 第1步. 根据您的具体需要或业务,进行用户登录验证处理
//****************************************************
bool loginSuccess = false;
// 根据系统自身的业务需求进行自己的账户验证/登录验证等处理
// ......
//
loginSuccess = true; // 这里假设用户登录已验证
if(loginSuccess == false) {
LabelMsg.Text = "登录失败!"; // 如果登录失败则报错
} else {
//****************************************************
// 第2步. 调用Wiwiz Auth API,进行预认证
// 重要: 请在服务器端的程序中进行此处理(例如,ASP、C#、JSP/Servet、PHP...),
// 而不要在直接客户端代码中进行此处理(例如,HTML/Javascript)
//****************************************************
// 参数 "action" : 必须!
// 设置为"1"将使用户认证成功
// 设置为"0"将使用户认证失败
string action = "1";
// 参数 "tokencode": 必须!
// 设置与同名传入参数相同的值
string tokencode = (string) Session["tokencode"];
// 参数 "srvurl": 必须!
// 设置与同名传入参数相同的值
string srvurl = (string) Session["srvurl"];
// 参数 "endtime" : 可选
// 格式: yyyy-mm-dd hh:MM:ss 例如: 2014-05-31 21:39:00
// 设置此参数将使用户的Internet连接在指定时间关闭
// 注意: 对此参数的值必须进行url编码
string endtime = Server.UrlEncode("2014-05-31 21:39:00");
// 参数 "postauth" : 可选
// 例如: http://www.YourDomain.com
// 设置此参数将设置用户在通过认证后显示的页面地址
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". 设置方法参考上面的说明
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(srvurl);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
streamOut.Write(parameters);
streamOut.Close();
StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
string verifycode = streamIn.ReadToEnd(); // 获取verifycode,即Wiwiz服务端返回的验证结果
streamIn.Close();
string userstring = "username:" + username.Text; // 设置自定义追踪信息(可选),本例中设为用户名
if(verifycode.StartsWith("ERR")) {
// 如果报错,则显示错误代码
LabelMsg.Text = "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.Redirect(redirectUrl); // 最后,进行跳转
}
}
}
}