简单的单点登录令牌颁发转发制作,利用POST与置换Form完成
2012-02-01 17:32
513 查看
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using SingleSignOn.Server.Auth; namespace SingleSignOn.Server { public partial class LoginPage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string reply = Request.QueryString["reply"]; string identifier = Request.QueryString["id"]; HtmlInputHidden replyInput = new HtmlInputHidden(); replyInput.ID = "reply"; replyInput.Name = "reply"; replyInput.Value = reply; HtmlInputHidden identifierInput = new HtmlInputHidden(); identifierInput.ID = "identifier"; identifierInput.Name = "identifier"; identifierInput.Value = identifier; HtmlInputHidden opereteInput = new HtmlInputHidden(); opereteInput.ID= "operate"; opereteInput.Name="operate"; opereteInput.Value = "1"; this.Form.Controls.Add(opereteInput); this.Form.Controls.Add(replyInput); this.Form.Controls.Add(identifierInput); } else { if (!string.IsNullOrEmpty(Request.Form["operate"]) && Request.Form["operate"] == "1") { if (this.Form != null) { //delete old form ,and then create new Form Post to reply this.Controls.Remove(this.Form); } TestProvider provider = new TestProvider(); string userName = Request.Form["username"]; string password = Request.Form["password"]; string reply = Request.Form["reply"]; string identifier = Request.Form["identifier"]; string token = provider.CreateAuthToken(userName, password, "TestSSOServer", identifier); Response.AppendCookie(new HttpCookie("TestSSO", "identifier+commonkey")); if (!string.IsNullOrEmpty(reply)) { HtmlForm f = new HtmlForm(); f.ID = "loginForm"; f.Method = "POST"; f.Action = reply; f.EnableViewState = false; HtmlInputHidden hidden = new HtmlInputHidden(); hidden.ID = "cookie"; hidden.Attributes.Add("value", token); f.Controls.Add(hidden); this.Controls.Add(f); } this.Response.Write("<script type='text/javascript'>var willReply = 1;</script>"); } } } } }
以上是Token颁发中心的公用Login页面的后台代码。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LoginPage.aspx.cs" Inherits="SingleSignOn.Server.LoginPage" %> <!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></title> <script type="text/javascript"> function submitNewForm() { try { if (willReply != null) { this.loginForm.submit(); } } catch (err) { //donothing } } </script> </head> <body onload="submitNewForm()"> <form id="loginForm" runat="server" action="#"> <div> UserName : <input type="text" name="username" id="username" /><br /> Passoword: <input type="password" name="password" id="password" /><br /> <input type="submit" value="Submit" /> </div> </form> </body> </html>
这一部分是Login页面的前台代码。
核心流程:
Client 需求登录-》重定向到STS的Login页面(附带数据接收地址reply与自身的identifier)-》STS验证凭据,并将结果Post到Reply页面,在POST之前,将STS的Token写入cookie以提供SingleSignOn功能-》Client解析STSPOST来的数据。
STS核心逻辑:
1.按照需求组装返回的数据和需要写在Cookie中Token,Token需要精心设计,否则真的是不安全的。
2.表单的置换,上述代码已经做了一些处理,但是可能会有不完善,只是个思路吧。
相关文章推荐
- 利用JAVA制作简单登录窗口
- 利用Java制作一个简单的QQ登录界面
- Unreal Engin_画廊制作笔记 _002<利用简单的网格模型完成场景基本形态>
- QuickPart应用(1)-----利用QuickPart制作一个简单的webpart
- Android初学者的简单登录,利用外形资源和selector选择器
- 利用node.js+mongodb如何搭建一个简单登录注册的功能详解
- 利用CONSTRUCT2制作简单的躲避游戏
- 利用cookie的跨域单点登录的简单实现
- [HTML5][JSP]利用FormData对象完成表单的异步上传|文件上传|图文同时上传
- 【SSH三大框架】Hibernate基础第五篇:利用Hibernate完成简单的CRUD操作
- 【Spring+SpringMVC+Mybatis】利用SSM整合,完成用户登录、注册、修改密码系统
- 【iOS-Cocos2d游戏开发之二十】精灵的基础知识点总汇(位图操作/贴图更换/重排z轴等)以及利用CCSprite与CCLayerColor制作简单遮盖层!
- JDBC 制作简单的登录验证
- 利用ps简单制作个性圆形印章
- 利用session完成登录
- 利用asp.net制作登录页面
- 利用Session完成用户的登录和注销
- 利用unity3d自带的CharacterController包制作第一人称控制模型的简单Demo
- 【ROM制作】利用厨房简单修改优化ROM
- VB 利用UDP制作简单的点对点聊天程序