2011-09-25 69 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)。

我还没有试过这个,所以我不知道还有什么需要,但这可能是你在找什么。

相关问题