作法:使用管理服務將 Faceboock 設定為網際網路身分識別提供者
發佈時間: 2011年4月
更新日期: 2011年5月
適用於: Windows Azure
適用對象
-
Microsoft® Windows Azure™ AppFabric Access Control Service (ACS)
-
Facebook
摘要
此主題簡述新增 Facebook 作為身分識別提供者所需的基本步驟。您可以將 Facebook 新增到 ACS,以作為身分識別提供者,方法是使用 http://portal.windows.net (http://go.microsoft.com/fwlink/?LinkID=129428) 上的 管理入口網站,或使用 ACS 管理服務自動化此步驟。例如,當您正在建立自訂的使用者介面,以便管理 ACS,或針對多用戶的「軟體即服務」(Software as a Service,SaaS) 解決方案自動化新用戶的報到機制時,使用這個管理服務十分有用。
內容
-
目標
-
概觀
-
步驟摘要
-
步驟 1 – 收集設定資訊
-
步驟 2 – 新增必要服務與組件的參考
-
步驟 3 – 實作 Management Service Proxy
-
步驟 4 – 新增身分識別提供者
-
步驟 5 – 測試您的工作
目標
-
識別必要的先決條件與設定資訊。
-
列出將 Facebook 新增為身分識別提供者所需的步驟。
-
測試設定是否成功。
概觀
管理服務是 Web 服務,為 ACS 的其中一個關鍵元件。管理服務會顯示可透過「管理入口網站」使用者介面使用的功能。任何可以在管理入口網站中完成的動作,也可以使用管理服務完成。藉由將 Facebook 新增到 ACS 作為身分識別提供者,能讓您省去網際網路規模之身分識別管理機制的開發和維護。若要完成將 Facebook 設定為身分識別提供者的工作,您需要按照特定步驟撰寫程式碼。本主題概述這些基本步驟。
步驟摘要
-
步驟 1 – 收集設定資訊
-
步驟 2 – 新增必要服務與組件的參考
-
步驟 3 – 實作 Management Service Proxy
-
步驟 4 – 新增身分識別提供者
-
步驟 5 – 測試您的工作
步驟 1 – 收集設定資訊
此步驟識別並顯示如何收集必要的設定資訊。您需要收集下列資訊:
-
管理服務身分識別使用者名稱 - ManagementClient。
-
管理服務身分識別密碼 - 若要取得該項管理服務的服務身分識別密碼:
-
登入存取控制服務管理入口網站 (http://go.microsoft.com/fwlink/?LinkID=129428)。
-
在 [系統管理] 區段中,按一下 [管理服務] 連結。
-
在 [管理服務] 頁面上,按一下 [ManagementClient] 連結 (ManagementClient 是服務的實際使用者名稱)。
-
在 [認證] 區段中,按一下 [對稱金鑰] 或 [密碼] 連結。這兩處內的值相同。這是密碼。
-
登入存取控制服務管理入口網站 (http://go.microsoft.com/fwlink/?LinkID=129428)。
-
您的服務命名空間
-
ACS 主機名稱 - 通常是 accesscontrol.windows.net。
-
Facebook 應用程式 ID 與應用程式祕密 - 請遵循作法:將 Facebook 設定為身分識別提供者中的指示。
收集必要的資訊後,請執行下列步驟建立主控台應用程式範例,該應用程式會執行程式碼,將 Facebook 新增為身分識別提供者。
-
開啟 Visual Studio® 2010 並建立新的主控台應用程式專案。
-
在 Program 類別中,使用類似下列內容的程式碼,將稍早收集到的資訊指派給模組範圍變數。
static string serviceIdentityUsernameForManagement = "ManagementClient"; static string serviceIdentityPasswordForManagement = "My Password for my ManagementClient"; static string serviceNamespace = "MyNameSpaceNoDots"; static string acsHostName = "accesscontrol.windows.net"; static string cachedSwtToken; static string identityProviderName = "Facebook"; static string facebookAppId = "Your Facebook AppID"; static string facebookAppSecret = "Your Facebook Secret";
步驟 2 – 新增必要服務與組件的參考
此步驟識別並將必要的相依性新增到服務與組件。
將必要的相依性新增到服務與組件
-
新增 System.Web.Extensions 的參考。
-
新增管理服務的服務參考。管理服務的 URL 對您的命名空間而言是唯一的,而且外觀應與下列內容類似:
https://您的命名空間.accesscontrol.windows.net/v2/mgmt/service
-
新增下列宣告。
using System.Web; using System.Net; using System.Data.Services.Client; using System.Collections.Specialized; using System.Web.Script.Serialization;
步驟 3 – 實作 Management Service Proxy
此步驟會建立一個方法來封裝 Management Service Proxy 的實作。
實作 Management Service Proxy
-
將程式類別新增到下列方法。
public static ManagementService CreateManagementServiceClient() { string managementServiceHead = "v2/mgmt/service/"; string managementServiceEndpoint = string.Format("https://{0}.{1}/{2}", serviceNamespace, acsHostName, managementServiceHead); ManagementService managementService = new ManagementService(new Uri(managementServiceEndpoint)); managementService.SendingRequest += GetTokenWithWritePermission; return managementService; } -
實作 GetTokenWithWritePermission 方法及其協助程式方法。它會將 SWT OAuth 權杖新增到 HTTP 要求的授權標頭。
public static void GetTokenWithWritePermission(object sender, SendingRequestEventArgs args) { GetTokenWithWritePermission((HttpWebRequest)args.Request); } public static void GetTokenWithWritePermission(HttpWebRequest args) { if (cachedSwtToken == null) { cachedSwtToken = GetTokenFromACS(); } args.Headers.Add(HttpRequestHeader.Authorization, string.Format("OAuth {0}", cachedSwtToken)); } private static string GetTokenFromACS() { // request a token from ACS WebClient client = new WebClient(); client.BaseAddress = string.Format("https://{0}.{1}", serviceNamespace, acsHostName); NameValueCollection values = new NameValueCollection(); values.Add("grant_type", "password"); values.Add("client_id", serviceIdentityUsernameForManagement); values.Add("username", serviceIdentityUsernameForManagement); values.Add("client_secret", serviceIdentityPasswordForManagement); values.Add("password", serviceIdentityPasswordForManagement); byte[] responseBytes = client.UploadValues("/v2/OAuth2-13/rp/AccessControlManagement", "POST", values); string response = Encoding.UTF8.GetString(responseBytes); // Parse the JSON response and return the access token JavaScriptSerializer serializer = new JavaScriptSerializer(); Dictionary<string, object> decodedDictionary = serializer.DeserializeObject(response) as Dictionary<string, object>; return decodedDictionary["access_token"] as string; }
步驟 4 – 新增身分識別提供者
此步驟會使用您稍早建立的 Management Service Proxy,將 AD FS 2.0 新增為身分識別提供者。
新增 AD FS 2.0 作為身分識別提供者
-
初始化 Management Service Proxy。
ManagementService svc = CreateManagementServiceClient();
-
將身分識別提供者新增為簽發者。
Issuer issuer = new Issuer { Name = identityProviderName + “-” + facebookAppId }; svc.AddToIssuers(issuer); svc.SaveChanges(SaveChangesOptions.Batch); -
建立身分識別提供者。
var facebook = new IdentityProvider { DisplayName = identityProviderName, LoginLinkName = "Facebook", LoginParameters = "email", WebSSOProtocolType = "Facebook", IssuerId = issuer.Id }; svc.AddObject("IdentityProviders", facebook); -
使用您稍早獲得的憑證當做基礎,建立一個身分識別提供者簽署金鑰。
var facebookKeys = new[] { new IdentityProviderKey { IdentityProvider = facebook, StartDate = DateTime.UtcNow, EndDate = DateTime.UtcNow.AddYears(1), Type = "ApplicationKey", Usage = "ApplicationId", Value = Encoding.Default.GetBytes(facebookAppId) }, new IdentityProviderKey { IdentityProvider = facebook, StartDate = DateTime.UtcNow, EndDate = DateTime.UtcNow.AddYears(1), Type = "ApplicationKey", Usage = "ApplicationSecret", Value = Encoding.Default.GetBytes(facebookAppSecret) } }; foreach (var key in facebookKeys) { svc.AddRelatedObject(facebook, "IdentityProviderKeys", key); } svc.SaveChanges(SaveChangesOptions.Batch); -
將身分識別提供者設為可供信賴憑證者使用,但管理服務除外。
foreach (RelyingParty rp in svc.RelyingParties) { // skip the built-in management RP. if (rp.Name != "AccessControlManagement") { svc.AddToRelyingPartyIdentityProviders(new RelyingPartyIdentityProvider() { IdentityProviderId = identityProvider.Id, RelyingPartyId = rp.Id }); } } svc.SaveChanges(SaveChangesOptions.Batch);
步驟 5 – 測試您的工作
測試您的工作
-
登入存取控制服務管理入口網站 (http://go.microsoft.com/fwlink/?LinkID=129428)。
-
在 [存取控制服務] 頁面上,按一下 [信任關係] 區段中的 [規則群組] 連結。
-
按一下任何一個可用的規則。
-
在 [編輯規則群組] 頁面上,按一下 [新增規則] 連結。
-
在 [新增宣告規則] 頁面上,從 [宣告簽發者] 區段的下拉式清單中選擇最近新增的身分識別提供者。
-
保留剩餘的預設值不變。
-
按一下 [儲存]。
您剛剛已經建立了身分識別提供者的傳遞規則。