如何在ASP.NET中创建OpenID
上一篇 / 下一篇 2008-10-13 14:20:26 / 个人分类:WEB开发
了解一下openIDopenID在中国还不怎么普及,而且支持openID登录的站点也比较少 ,不过还是先补充点openID的信息吧 啥是openID呢,所谓openID就是用一个URL作为登录帐号和密码的验证 再详细一点就是,不用注册,也不用输入密码,只要你拥有一个openID就可以登录网站了 可能这样说有点难以理解,接下来我们稍微深一点的去理解 假设你现在已经从一个可以申请openID的网站上申请了一个openID,链接是”rjys.163.com” {openID是一个URL链接,不是一个以前的字母或者字母+数字哦} 什么是OpenID? <link rel="openid.server" href="http://openid.example.com/"> 保存这些link元数据的最常见位置就是个人站点(比如博客)的根页面。ITPUB个人空间/a9d
A4u];Us@5X,Ab |
在ASP.NET中实现OpenID登录
| 注册一个OPENID帐号,这里使用http://www.myopenid.com。 | |
1.从谷歌CODE上下载强大的C# OpenID库DotNetOpenId,并把它应用到你的项目中。ITPUB个人空间1C@:X0L$Q
ur.]
@/qA![]() | |
| 2.在OpenID登录时添加了一些不错的可用性功能,这是可选的,下图为格式化了的OpenID框,请转到:ID Selector。 qF*r7@$S#H v0XS0 ![]() | |
| 3.转到Scott Hanselman's的示例帖子。你将很好的了解如何新增的OpenID到ASP.NET的网站。 | |
| 4.创建登录表单,这里用用户控件。 Npf'duWUA0 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="OpenIdLoginForm.ascx.cs" Inherits="OpenIDSampleApp.Web.UserControls.OpenIdLoginForm" %>OpenID:<asp:TextBoxID="openid_identifier"runat="server"/><asp:ButtonID="loginButton"runat="server"Text="登录"OnClick="loginButton_Click"/><!-- BEGIN ID SELECTOR --><scripttype="text/javascript"><!-- idselector_input_id ="<%= openid_identifier.ClientID %>"; --></script><script. type="text/javascript"id="Script1" src="https://www.idselector.com/selector/acd9fbc926f4707be4d6a05b400fe40de1f31449"charset="utf-8"></script><!-- END ID SELECTOR --><br/><asp:CheckBoxID="chkRememberMe"runat="server"Text="记住我."/><asp:CustomValidatorrunat="server"ID="openidValidator"ErrorMessage="OpenID格式无效"ControlToValidate="openid_identifier"EnableViewState="false"OnServerValidate="openidValidator_ServerValidate"/><asp:LabelID="loginFailedLabel"runat="server"EnableViewState="False"Text="登录失败"Visible="False"/><asp:LabelID="loginCanceledLabel"runat="server"EnableViewState="False"Text="登录取消"Visible="False"/> | |
| 5.登录按钮下的代码,Scott Hanselman's提供,基本上告诉的OpenID库需要用户的电子邮件和昵称。 v @E&s:U0 protectedvoidloginButton_Click (objectsender, EventArgs e ) {if( !openidValidator.IsValid )return;// 如果自定义验证失败,将不会登录。OpenIdRelyingParty penid =newOpenIdRelyingParty ();try{ IAuthenticationRequest request = openid.CreateRequest ( openid_identifier.Text );// 请将您的访客给供应商进行验证。ClaimsRequest fetch =newClaimsRequest (); fetch.Nickname = DemandLevel.Require; fetch.Email = DemandLevel.Require; request.AddExtension ( fetch );//SaveCookies (); //在网站上保存身份票request.RedirectToProvider (); }catch( OpenIdException ex ) {// 可能不是一个有效的OpenID。openidValidator.Text = ex.Message; openidValidator.IsValid =false; } } | |
| 6.。处理OpenID库的答复,当然你也可以让用户选择是否用OPENID创建一个帐户,或者直接看看是否用户已经存在与网站上的ASP.NET成员数据库。 6Jm;JFY'XK^0如果不存在可以为OPEN用户创建一个成员帐户使用OpenID作为他们的用户名。 j1@7]U~4Gn0 protectedvoidPage_Load (objectsender, EventArgs e ) { openid_identifier.Focus (); OpenIdRelyingParty penid =newOpenIdRelyingParty ();if( openid.Response !=null) {switch( openid.Response.Status ) {caseAuthenticationStatus.Authenticated:// 下面2个变量只是为了作为后面的添加网站用户表字段的值,// 也就是创建Membership[web.config]时才用到stringemail ="";stringalias =""; ClaimsResponse fetch = openid.Response.GetExtension ( typeof( ClaimsResponse ) )asClaimsResponse;if( fetch !=null) { alias = fetch.Nickname; email = fetch.Email; }if(string.IsNullOrEmpty ( alias ) ) alias = openid.Response.ClaimedIdentifier;if(string.IsNullOrEmpty ( email ) ) email = openid.Response.ClaimedIdentifier;//#region Membership[web.config]// 是否在网站上添加OPEN用户//if (Membership.GetUser(openid.Response.ClaimedIdentifier) == null)//{// MembershipCreateStatus membershipCreateStatus;// MembershipUser user = Membership.CreateUser(// openid.Response.ClaimedIdentifier,// "123456",// email,// "这是一个的OpenID帐户。昵称是什么?",// alias,// true,// out membershipCreateStatus );// if (membershipCreateStatus != MembershipCreateStatus.Success) {// loginFailedLabel.Text += ": 帐户添加不成功的: " +// membershipCreateStatus.ToString();// loginFailedLabel.Visible = true;// break;// }// user.Comment = alias;// Membership.UpdateUser(user);//}// 使用FormsAuthentication告诉ASP.NET,用户现在已经登录成功,// 并使用OpenID标识作为用户名//#endregionFormsAuthentication.RedirectFromLoginPage ( openid.Response.ClaimedIdentifier, chkRememberMe.Checked );break;caseAuthenticationStatus.Canceled: loginCanceledLabel.Visible =true;break;caseAuthenticationStatus.Failed: loginFailedLabel.Visible =true;break; } } } | |
| 7.测试. \.Z/Ak\2K0 ![]() [je yP)o^0 ![]() ![]() |
http://www.codeplex.com/dasblog
相关阅读:
- 配置报表服务器服务帐户 (iDotNetSpace, 2008-10-10)
- SQL Server 2008 的版本和组件 (iDotNetSpace, 2008-10-10)
- .Net开发工具更新消息 (iDotNetSpace, 2008-10-13)
- .NET中的动态编译 (iDotNetSpace, 2008-10-13)
- KeyDown,KeyPress 和KeyUp 之我谈 (iDotNetSpace, 2008-10-13)
- 使用SilverLight构建插件式应用程序 (iDotNetSpace, 2008-10-13)
- 3层构架.NET还缺点儿什么? (iDotNetSpace, 2008-10-13)
- WebService特性和数组类型解析 (iDotNetSpace, 2008-10-13)
- windows下编译squid的经验 (iDotNetSpace, 2008-10-13)
- 在Web.Config中指定页面的基类 (iDotNetSpace, 2008-10-13)
导入论坛 引用链接 收藏 分享给好友 推荐到圈子 管理 举报
标题搜索
我的存档
数据统计
- 访问量: 67609
- 日志数: 1924
- 影音数: 7
- 文件数: 1
- 建立时间: 2008-01-04
- 更新时间: 2008-12-05








