2011-09-25 76 views
3

我正在使用Azure ACS,並且一直在尋找可以從SAML 2.0響應中獲取電子郵件和名稱的東西。如何從Azure ACS獲取電子郵件和名稱?

但我沒有看到它的任何選擇,我將用戶重定向到localhost:8000/ACC/completesigninup/

在那裏,我已經從的FormCollection對象的XML,我看到在XML中的電子郵件和名稱,但我不知道如何得到它。是否有一個解析器包含在Identity DLL中以獲取該信息?

回答

4

既然你提到了FormCollection,我假設你正在用.Net編程。那麼最簡單的事情就是使用WIF(http://msdn.microsoft.com/en-us/security/aa570351)。

這樣您就不必解析令牌,驗證它,設置用戶身份,然後創建一個代表來自令牌的信息的cookie。

WIF,一旦您安裝並配置它(SDK附帶Visual Studio擴展程序來執行此操作),將自動爲您執行這些操作。

您可以使用帶有MVC的WIF查看一些示例。一個樣品是ACS與MVC3,你可以找到在:

http://msdn.microsoft.com/en-us/library/hh127794.aspx

一旦你這樣做在你的控制器,你可以訪問用戶的身份,並獲得要求的值,例如:

((IClaimsPrincipal)HttpContext.User).Identity.Claims.FirstOrDefault(c => c.ClaimType == ClaimTypes.Email) 

注意由於Windows Live隱私策略,ACS中的Windows Live IDP不會發出用戶的電子郵件地址。

+0

Atacan,我的網站用戶可以將圖像添加到隊列以便稍後查看。我想提取一個電子郵件的名稱,該電子郵件將是我的數據庫中唯一的ID。 我已經使用WIF,但沒有看到一個選項提取了名稱和電子郵件。 –

+0

Hi J Maj。我已經更新了答案,說明如何從驗證的用戶提取聲明值。另請注意,Windows Live擁有嚴格的隱私政策,不會泄露任何用戶的電子郵件或聲稱索賠。 – Atacan

0

Atacan對於除了一個細節以外的所有內容都是正確的:似乎有從Windows Live獲取所需信息的方式,但它與Google,Facebook和Yahoo帳戶使用的方式不同。 JavaScript Windows Live API支持獲取用戶的名字等信息(link)。

我還沒有試過這個,所以我不知道還有什麼需要,但這可能是你在找什麼。

相關問題