我一直在为身份提供商的azure应用程序配置访问控制命名空间,并且能够使用他们的声明令牌从Google和Yahoo返回一个电子邮件地址,但使用Windows Live ID,我能找到的唯一识别值是这个:
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier: gX5FDH7dCnWGUfe46CwiCSvRUosc2aM7kmMHBnjQOxM=
我知道这代表了电子邮件地址,但我无法知道' gX5FDH7dCnWGUfe46CwiCSvRUosc2aM7kmMHBnjQOxM = '与用户注册时我的数据库中的emailaddress存储值有关,这导致我无法找到用户的YSoD。我阅读了一些内容,可以使用Windows Live Connect工具将其转换为电子邮件地址,但我无法找到任何进一步的信息。
任何人都知道如何在c#代码后面做到这一点?
答案 0 :(得分:0)
似乎有一些代码示例可供您查找:
http://msdn.microsoft.com/en-us/library/hh243641.aspx
我认为您需要为 wl.basic 范围请求令牌,以获取包含用户电子邮件地址声明的访问令牌。
所以根据链接,一种方法是这样的:
private async void btnGreetUser_Click(object sender, RoutedEventArgs e)
{
try
{
LiveAuthClient auth = new LiveAuthClient();
LiveLoginResult initializeResult = await auth.InitializeAsync();
try
{
LiveLoginResult loginResult = await auth.LoginAsync(new string[] { "wl.basic" });
if (loginResult.Status == LiveConnectSessionStatus.Connected)
{
LiveConnectClient connect = new LiveConnectClient(auth.Session);
LiveOperationResult operationResult = await connect.GetAsync("me");
dynamic result = operationResult.Result;
if (result != null)
{
this.infoTextBlock.Text = string.Join(" ", "Hello", result.name, "!");
}
else
{
this.infoTextBlock.Text = "Error getting name.";
}
}
}
catch (LiveAuthException exception)
{
this.infoTextBlock.Text = "Error signing in: " + exception.Message;
}
catch (LiveConnectException exception)
{
this.infoTextBlock.Text = "Error calling API: " + exception.Message;
}
}
catch (LiveAuthException exception)
{
this.infoTextBlock.Text = "Error initializing: " + exception.Message;
}
}
因此,您将范围作为字符串数组传递,而不是使用wl.basic范围(wl.emails范围)来访问电子邮件信息,请参阅:
http://msdn.microsoft.com/en-us/library/hh243646.aspx#wlemails