日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

使用Windows Live ID登录网站

發(fā)布時(shí)間:2023/12/20 windows 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Windows Live ID登录网站 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用Windows Live ID登錄網(wǎng)站

http://tech.ddvip.com/2008-12/122829342597137_3.html

在上一篇文章之中,我具體的講解了使用Google的Authsub接口來讓自己的網(wǎng)站支持Google帳號登陸,今天要講到的是WindowsLive ID,即使用MSN或Hotmail的帳號來登錄網(wǎng)站,因?yàn)槠渲械幕A(chǔ)原理類似,因此,假如對登錄的流程和原理不清楚的話,建議去看看我前面的幾篇文章,在這里,我主要講解具體的實(shí)現(xiàn)和源碼。

  關(guān)于WindowsLive ID接口的更多信息,建議去參考查看WindowsLive ID接口介紹網(wǎng)站的更多內(nèi)容,我在這篇文章之中,僅僅會講到WindowsLive ID在WebAuthentication上的一個(gè)應(yīng)用。

  首先,和GoogleAuthSub一樣,你必須先在Live的云計(jì)算開發(fā)中心AzureServices Developer Portal去注冊你的程序,其實(shí)幾個(gè)星期前我注冊程序的時(shí)候應(yīng)該還不叫這個(gè)比較時(shí)髦的名字的,今天我因?yàn)閷戇@個(gè)文章再上去一看,居然變成“云”了,這么說來,我已經(jīng)“云計(jì)算”了一把了,呵呵!

  現(xiàn)在的注冊界面如圖(我這里截圖是修改界面,添加界面和這個(gè)類似):

  注冊完成之后,就可以得到一個(gè)上面的ApplicationID,需要說明的是,上面的ReturnURL意義不是很大,可能僅僅在缺省的時(shí)候使用,因?yàn)槲易詴r(shí)候采用的圖上顯示的值,而實(shí)際上使用的卻是http://account.step1.cn/account/Handler.aspx?ass=live.com,只要將這個(gè)值傳遞過去,Live ID服務(wù)應(yīng)該就不使用注冊的值了。

  注冊完成之后,就可以開始進(jìn)行開發(fā),需要說明的是,在LiveID站點(diǎn)上提供了一個(gè)非常簡單的類WindowsLiveLogin.cs,應(yīng)該可以在這個(gè)例子之中得到這個(gè)類:Runningthe C# QuickStart Sample,而且可能是因?yàn)橛辛诉@個(gè)類,Microsoft覺得不需要再去提供什么和服務(wù)端交互的文檔了(反正我沒有找到),因此,我就直接不改動任何程序的情況下使用了這個(gè)類,這樣,一切就方便了很多了。

先看如何得到用來讓用戶登錄的轉(zhuǎn)向地址,這個(gè)太容易了,因?yàn)檫@正是WindowsLiveLogin類的方法,需要說明的是,WindowsLiveLogin類有幾個(gè)方法來獲得轉(zhuǎn)向地址的,其中GetLoginUrl方法得到的地址僅僅進(jìn)行用戶登錄,而不向用戶申請任何權(quán)限,而GetConsentUrl(stringscope)方法可以指定向用戶申請讀取相應(yīng)數(shù)據(jù)的權(quán)限,和GoogleAuthSub一樣,我們在使用Live的登錄的時(shí)候也需要讀取用戶的地址本信息來獲得用戶的登錄帳號地址,因此,我們使用wll.GetConsentUrl("Contacts.View");方法來獲得轉(zhuǎn)向URL,("Contacts.View"代表對地址本的只讀訪問),當(dāng)然在使用這個(gè)方法之前,要先設(shè)置好PolicyUrl屬性(隱私申明地址)和ReturnUrl屬性(登錄完成之后的回轉(zhuǎn)地址);

  有一點(diǎn)需要特別說明的是:在使用GetLoginUrl或者GetConsentUrl方法之前,Live要求用戶必須必須已經(jīng)指定WindowsLiveLogin的PolicyUrl屬性,也就是隱私申明的地址,而且,要求指定的網(wǎng)址必須是能夠訪問的,似乎Live還會去檢查這個(gè)網(wǎng)址是否能夠訪問的,我在系統(tǒng)之中將隱私申明的網(wǎng)址指定為我的登錄頁面,因?yàn)樵谀莻€(gè)頁面有我關(guān)于保護(hù)用戶隱私的申明。

  將用戶轉(zhuǎn)向到剛才獲取的URL之后,用戶就會被轉(zhuǎn)向到Live ID的登錄頁:

  用戶輸入自己的帳號登錄之后,就會出現(xiàn)用戶的授權(quán)提示信息,可惜因?yàn)槲业臏y試帳號早就授權(quán)過了,所以,這個(gè)頁面被直接跳過,我不能在這里給出截圖,實(shí)在抱歉,在用戶在授權(quán)信息頁面上點(diǎn)擊同意之后,Live就會轉(zhuǎn)向到上面通過ReturnUrl指定的登錄回轉(zhuǎn)地址。

Live轉(zhuǎn)回到登錄回轉(zhuǎn)地址的時(shí)候,會有多種參數(shù)(delauth,login,logout,clearcookie),根據(jù)Live接口的要求,這些類型都應(yīng)該實(shí)現(xiàn),具體每個(gè)類型代表如下含義:

  1.delauth,這個(gè)是我主要用到的類型,就是在用戶登錄并授與訪問權(quán)限之后,回轉(zhuǎn)的類型,注意,必須調(diào)用GetConsentUrl方法才會得到這種回轉(zhuǎn),從參數(shù)之中可以獲取到ConsentToken參數(shù),就是后面要用到的數(shù)據(jù)訪問令牌。

  2.login,這是調(diào)用GetLoginUrl方法之后回轉(zhuǎn)的類型,也就是說,是不需要訪問用戶的任何數(shù)據(jù)的情況下回轉(zhuǎn)訪問的參數(shù)類型;

  3.logout,注銷

  4.clearcookie,清除Cookie

  在本系統(tǒng)之中,僅僅使用了delauth,從參數(shù)之中獲得ConsentToken參數(shù),然后,我們可以使用這個(gè)數(shù)據(jù)令牌去獲取用戶的帳戶名稱和昵稱,同樣,也是訪問Windows Live Contacts接口,因?yàn)閃indows Live Contacts接口不是我要講的主題,因此不做詳細(xì)的介紹,需要了解我如何使用,參考我的代碼即可。

  取得用戶的登錄ID和昵稱之后,寫入到用戶的Cookie之中,然后登錄回轉(zhuǎn),采用Live登錄的過程就算完成了,還有什么不清楚的地方的話,請參考我下面貼出的整體代碼:

  LiveServer.cs代碼

 1  public class LiveServer : BaseServer
 2  {
 3    public WindowsLiveLogin wll;
 4    //采用Web.Config之中的XML節(jié)點(diǎn)作為構(gòu)造函數(shù)參數(shù)
 5    public LiveServer(System.Xml.XmlNode node):base(node)
 6    {
 7      wll = new WindowsLiveLogin(false);
 8      for (int i = 0; i < node.Attributes.Count; i++)
 9      {
10        switch(node.Attributes[i].LocalName)
11        {
12          case"appid":
13            wll.AppId =node.Attributes[i].Value;
14            break;
15          case"secret":
16            wll.Secret = node.Attributes[i].Value;
17            break;
18          case"securityalgorithm":
19            wll.SecurityAlgorithm= node.Attributes[i].Value;
20            break;
21        }
22      }
23    }
24    //采用回傳得到的令牌獲取用戶的信息
25    public XmlDocumentgetData(string token)
26    {
27      string lid =wll.ProcessConsentToken(token).LocationID;
28      //訪問用戶的地址本
29      HttpWebRequestrequest = (HttpWebRequest)WebRequest.Create(new Uri("https://livecontacts.services.live.com/users/@L@"+ lid + "/rest/LiveContacts/owner"));
30      request.Method ="GET";
31      request.Headers.Add("Authorization","DelegatedToken dt="" +wll.ProcessConsentToken(token).DelegationToken + """);
32      HttpWebResponseresponse = getResponse(request);
33      XmlDocument doc =new XmlDocument();
34      if (response !=null)
35      {
36        doc.Load(response.GetResponseStream());
37      }
38      return doc;
39    }
40    public staticHttpWebResponse getResponse(HttpWebRequest request)
41    {
42      try
43      {
44        return(HttpWebResponse)request.GetResponse();
45      }
46      catch (WebExceptione)
47      {
48        HttpContext.Current.Response.Write(e.Message);
49        string result = newStreamReader(e.Response.GetResponseStream()).ReadToEnd();
50        HttpContext.Current.Response.Write(result);
51        HttpContext.Current.Response.End();
52      }
53      return null;
54    }
55    //得到用戶的登錄URL地址
56    public overridestring getLoginUrl()
57    {
58      wll.PolicyUrl =AccountHelper.getLoginUrl();
59      wll.ReturnUrl =getHandleUrl();
60      returnwll.GetConsentUrl("Contacts.View");
61      //returnwll.GetLoginUrl();
62    }
63    //處理登錄回轉(zhuǎn)信息
64    public overridevoid parseHandle(HttpContext page)
65    {
66      string action =page.Request["action"];
67      switch (action)
68      {
69        case"delauth":
70          //獲得用戶地址本XML數(shù)據(jù)
71          XmlDocument doc =getData(page.Request["ConsentToken"]);
72          //獲取用戶帳號
73          XmlNode node =doc.SelectSingleNode("Owner/WindowsLiveID");
74          string account =node != null ? node.InnerText : "";
75          //獲取用戶的昵稱
76          node =doc.SelectSingleNode("Owner/Profiles/Personal/DisplayName");
77          string name = node!= null ? node.InnerText : "";
78          //設(shè)置用戶信息到Cookie
79          AccountHelper.setUserInfo(account,name, this.name);
80          //回轉(zhuǎn)
81          AccountHelper.returnOpener();
82          page.Response.End();
83          break;
84        case"login"://這是Live接口要求定義支持的類型,系統(tǒng)之中沒有主動使用這種請求
85          WindowsLiveLogin.Useruser = wll.ProcessLogin(page.Request.Form);//從URL參數(shù)之中解析出用戶的登錄信息
86          AccountHelper.setUserInfo(user.Id,user.Id, this.name);//這里的user.ID實(shí)際上已經(jīng)是用戶的E-mail
87          AccountHelper.redirect(wll.GetConsentUrl("Contacts.View",user.Token));
88          page.Response.End();
89          break;
90        case"logout"://這是Live接口要求定義支持的類型,系統(tǒng)之中沒有主動使用這種請求
91          AccountHelper.clearCookie();
92          AccountHelper.returnOpener();
93          page.Response.End();
94          break;
95        case"clearcookie"://這是Live接口要求定義支持的類型,系統(tǒng)之中沒有主動使用這種請求
96        default:
97          AccountHelper.clearCookie();
98          string type;
99          byte[] content;
100          wll.GetClearCookieResponse(outtype, out content);
101          page.Response.ContentType= type;
102          page.Response.OutputStream.Write(content,0, content.Length);
103          page.Response.End();
104          break;
105
106      }
107    }
108  }

上一頁123

===================End =============

總結(jié)

以上是生活随笔為你收集整理的使用Windows Live ID登录网站的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。