天天看點

基于DotNetOpenAuth實作OpenID 服務提供者

everbox網盤(www.everbox.com)是由盛大創新院推出的一款網盤産品,提供了超大的免費存儲空間(可更新到 10gb),支援檔案同步、檔案分享、線上浏覽照片、線上聽音樂等功能,并提供 windows 用戶端程式。其中有一項是可以使用第三方的賬号注冊使用,也就是oauth登陸,說的更具體的就是用openid了,誰需要everbox的邀請可以給我留言或者qq上找我。

基于DotNetOpenAuth實作OpenID 服務提供者

openid 是一個以使用者為中心的數字身份識别架構,它具有開放、分散、自由等特性。 openid 的建立基于這樣一個概念:我們可以通過 uri (又叫 url 或網站位址)來認證一個網站的唯一身份,同理,我們也可以通過這種方式來作為使用者的身份認證。由于uri 是整個網絡世界的核心,它為基于uri的使用者身份認證提供了廣泛的、堅實的基礎。

openid 系統的第一部分是身份驗證,即如何通過 uri 來認證使用者身份。目前的網站都是依靠使用者名和密碼來登入認證,這就意味着大家在每個網站都需要注冊使用者名和密碼,即便你使用的是同樣的密碼。如果使用 openid (參見規範),你的網站位址(uri)就是你的使用者名,而你的密碼安全的存儲在一個 openid 服務網站上(你可以自己建立一個 openid 服務網站,也可以選擇一個可信任的 openid 服務網站來完成注冊)。具體可以參考園友的文章 如何在asp.net中建立openid。

下面的部分我重點是在如何把自己網站的賬号通過openid開放出來,類似于qq,gmail,baidu,盛大通行證賬号的一鍵式登陸。

openid協定非常易于擴充,下面的圖表展示了openid2.0草案的基本工作流程。它展示了在終端使用者、relying party站點(一個示例站點)和openid服務提供者之間的互動過程(最常見的認證流程),更詳細的資訊參考openid使用手冊。

基于DotNetOpenAuth實作OpenID 服務提供者

然後,指定是否應将國際化域名 (idn) 分析應用到域名中,以及是否應該應用 iri 分析規則。這可以在整個計算機範圍的 machine.config 或單個應用程式的 app.config 中進行,如:複制代碼

啟用 idn 可以将域名中的所有 unicode 标簽轉換成其 punicode 等同項。punicode 名稱隻含有 ascii 字元,而且總是以字首“xn--”開頭。這是因為 internet 上目前部署的大多數 dns 伺服器僅支援 ascii 字元。啟用 idn 隻會影響 uri.dnssafehost 屬性的值。對于微軟香港.com 來說,它包含 xn--g5tu63aivy37i.com,而 uri.host 将包含 unicode 字元。根據您所使用的 dns 伺服器,在 idn 元素的已啟用屬性中,有三種可能的 idn 值供您使用:“all”會将 idn 名稱 (punicode) 用于所有域名。

“allexceptintranet”會将 idn 名稱用于所有外部域名,而将 unicode 名稱用于所有内部域名。僅當 intranet dns 伺服器支援 unicode 名稱時,這種情況才适用。“none”是預設值,它和 .net framework 2.0 的行為相符。 啟用 iri 分析 (iriparsing enabled = "true") 後,系統會根據 rfc 3987 中的最新 iri 規則進行規範化和字元檢查。當預設值為 false 時,則會根據 rfc 2396(請參見 faqs.org/rfcs/rfc2396.html)進行規範化和字元檢查。要了解有關通用資源辨別符和 uri 類的更多資訊,請參閱線上文檔,位址為msdn2.microsoft.com/system.uri。

先簡要介紹一下wif,windows身份驗證基礎 (先前代号為 geneva 架構) 是微軟.net架構的一個新拓展,它幫助開發者建構具有聲明意識的應用程式(這将使您的應用程式的使用者認證客觀化),改善開發者生産力,增強應用程式安全性,提供協同合作性。基于可協同合作的标準協定,wif以及基于聲明的身份驗證模式,可以使得在雲端或非雲端的asp.net與wcf的應用程式,實作單點登陸,個性化,聯合化,強驗證,身份驗證委托,以及其他驗證功能。

使用wif,無論應用程式托管于非雲端還是windows azure,開發者可以使用單一的程式設計模式來處理身份驗證。 因為您隻需學習一種模式和一套工具,您的生産力得到了提高,并且如果改變托管的環境,您也可以迅速的上手。因為不論應用程式托管于哪裡,模式是不變的,是以使用wif可以更便捷的将非雲端應用程式遷移至windows azure(從身份驗證的角度),反之亦然。

預設的示例裡頭隻傳回給 relying party很少資訊. 一般隻有兩個,一個是:friendlyidentifierfordisplay ,就是使用者名,一個是claimedidentifier, 是使用者的辨別.。一般我們還要抓到使用者的email,和個性圖示.等等一些有用的東西.但是預設的是不傳回的。先看看可以傳回什麼資訊. dotnetopenauth中有一個wellknownattributes 類, 這個類中定義了一系列可以傳回的資訊

如何向外提供這些資訊呢? 請看下面的示例代碼 :

本文來自雲栖社群合作夥伴“donet跨平台”,了解相關資訊可以關注“opendotnet”微信公衆号

繼續閱讀