2014-04-03 74 views
0

這是我第一次在這裏發帖,所以請對我溫柔! :)從ACS退回AD組員身份

我試圖開發一個應用程序使用Azure ACS(即Office 365)作爲身份驗證系統。事情的身份驗證方面似乎很好,我被重定向到Office 365登錄頁面,並可以成功登錄。我的代碼然後使用圖形API獲取有關該用戶的其他信息。

我在掙扎的是獲取登錄人員所屬的AD組列表。當我要求獲取組列表時,只返回Office 365安全角色。

這裏是我做了什麼(我希望我已經包括了相關的一切)

從內Azure的;

  • 極速到Active Directory
  • 選擇我的域名(其中DirSyncs從的預置型AD)
  • 創建一個新的應用程序
  • 允許讀取目錄數據,並啓用登錄和讀取用戶的個人資料
  • 創建一個新的關鍵

從我的測試應用程序中;

  • 的創
  • 使用的身份識別和訪問設置指定一個新的Web應用程序(標準網頁形式)「用戶身份的業務提供」
  • 添加一個clientId和密碼發送到app.settings文件
  • 添加在Windows Azure Active Directory的圖形輔助項目

這裏是我的相關代碼

 IPrincipal myPrincipal = this.User; 

     //get the tenantName 
     string tenantName = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value; 

     // retrieve the clientId and password values from the Web.config file 
     string clientId = Properties.Settings.Default.ClientID; 
     string password = Properties.Settings.Default.Password; 

     // get a token using the helper 
     AADJWTToken token = DirectoryDataServiceAuthorizationHelper.GetAuthorizationToken(tenantName, clientId, password); 

     // initialize a graphService instance using the token acquired from previous step 
     DirectoryDataService graphService = new DirectoryDataService(tenantName, token); 

     User myUser = graphService.users.Where(it => (it.userPrincipalName == myPrincipal.Identity.Name)).SingleOrDefault(); 
     graphService.LoadProperty(myUser, "memberOf"); 
     List<Role> currentRoles = myUser.memberOf.OfType<Role>().ToList(); 

當我運行我的代碼時,currentRoles只包含「公司管理員」而不是我所屬的其他組。

我讀過很多關於如何通過命名空間添加規則的文章,但似乎與使用Windows ACS有關。

我可能缺少一個真正的基本步驟,並且將是朝着正確的方向:)輕推感激不盡

感謝, 達倫

回答

0

假設你的代碼是好的(這是很難說有隻是片段),您的主要問題是您使用Role而不是Group。圖中的角色和組是不同的概念。圖返回的角色不適用於基於角色的訪問控制(RBAC),而組可以(也應該)用於此目的。 See my other answer here for more information

另外,如果您需要使用多個身份驗證提供程序進行身份驗證,則在不知道應用程序需求的情況下,您應該只使用ACS。看起來您只是將Azure AD用作您的IdP,因此您可以直接對服務進行身份驗證,而不是將ACS用作中間人。

This topic about authorization and RBAC在Azure AD和accompanying code sample應該可以幫助您更好地瞭解如何在Azure AD和圖中使用角色和組。

+0

謝謝肖恩。我將「角色」的最後一行代碼更改爲「組」,它的作用很好。我想在玩了幾個小時的代碼之後,我的大腦將角色和組合在一起(這從來不是一個好主意)。 – Darren