2015-04-26 39 views
1

經過大量的挖掘,我已經通過Azure移動服務對WPF應用程序進行了簽名。我的移動服務已連接到我設置的Azure Active Directory。但是,當我使用MobileServiceClient.LoginAsync(...)登錄用戶時,MobileServiceUser UserId看起來像是一個不可讀的哈希。例如,它看起來像:「Aad:X3pvh6mmo2AgTyHdCA3Hwn6uBy91rXXXXXXXXXX」。這究竟是什麼?如何從MobileServiceUser獲取用戶名,電子郵件等?

我想抓住用戶的顯示名稱來使用,但我不知道如何。

回答

3

這是Azure Active Directory的用戶標識。您需要創建一項服務以通過服務公開您的AAD信息,並使用您從用戶處獲得的訪問令牌來檢索附加信息。

第一:

ServiceUser user = this.User as ServiceUser; 
    var identities = await user.GetIdentitiesAsync(); 
    var aad = identities.OfType<AzureActiveDirectoryCredentials>().FirstOrDefault(); 
    var aadAccessToken = aad.AccessToken; 
    var aadObjectId = aad.ObjectId; 

這會給你的訪問令牌的objectID,那麼你就需要通過查詢AAD造影API的信息。 https://msdn.microsoft.com/library/azure/dn151678.aspx 看樣品請求部分。您應該爲查詢提供您獲取的訪問令牌和objectId。

+0

通過圖API查詢時,我得到Access令牌丟失或格式錯誤。任何想法? – Ramesh

+0

可能需要比您在此描述的更多細節。只要您確保您的訪問令牌存在於您的請求標頭中,它就應該可以正常工作。 – beast

+0

這個答案中的「this」對象是什麼? –

0

這是一個替代方法,在閱讀http://justazure.com/azure-active-directory-part-2-building-web-applications-azure-ad/後,滾動到.Net中關於Identity的部分,它講述了聲明是如何作爲框架的標準部分。所以一旦你得到像@beast提供的證書對象

var aad = identities.OfType<AzureActiveDirectoryCredentials>().FirstOrDefault(); 

你實際上可以用各種屬性獲取字典。一些屬性的例子可以在https://msdn.microsoft.com/en-us/library/system.identitymodel.claims.claimtypes(v=vs.110).aspx

所以發現從那裏你可以做到以下幾點:

if (aad != null) 
{ 
    var d = aad.Claims; 
    var email = d[ClaimTypes.Email]; 
} 

我這樣做是爲了拉這是跨在一個表中引用的用戶ID。僅供參考我正在使用應用程序服務,但我相信移動服務中的憑證對象是相同的

相關問題