ASP.NET MVC4 OAuth Microsoft(Live)帐户 - 获取用户的电子邮件

时间:2013-06-16 22:03:25

标签: asp.net-mvc-4 oauth-2.0 windows-live-id liveid

我正在尝试使用Microsoft ID为我的ASP.NET MVC4网站实施OAuth身份验证。到目前为止,使用Microsoft帐户登录工作。但我需要获得一些额外的用户数据(特别是用户帐户或首选电子邮件地址)。

我正在使用live.domains作为我的电子邮件服务。所以我用我的域名为我的用户创建了电子邮件。现在,我想让这些用户使用他们的电子邮件帐户(使用OAuth)登录该站点。

注意:我的网络服务器不支持asp.net 4.5,所以我坚持4.0,并且不能使用LiveSDK for ASP.NET(据我所知)...... / em>的

这个想法是这样的:

  • 使用内置的OAuth功能在
  • 中记录用户
  • 获取他们的帐户电子邮件地址,并检查是否是来自我的域的电子邮件
  • 如果不是来自我的域名,请拒绝注册
  • 如果电子邮件来自我的域名,请允许用户注册并正常进行

我创建了一个自定义的Microsoft OAuth2Client,使用默认的引用(默认客户端可以在github上找到),并指定了所需的范围(wl.basic,wl.signin,wl.emails)。其余代码几乎相同。

public MyMicrosoftClient(string appId, string appSecret)
    : this(appId, appSecret, new string[] {"wl.basic", "wl.signin", "wl.emails"})
{
}

GetUserData函数用于获取额外的用户数据(如名称,性别),这是有效的。默认客户端的代码:

protected override IDictionary<string, string> GetUserData(string accessToken)
{
    MicrosoftClientUserData graph;
    var request =
        WebRequest.Create("https://apis.live.net/v5.0/me?access_token=" + CustomHelpers.EscapeUriDataStringRfc3986(accessToken));
using (var response = request.GetResponse())
{
    using (var responseStream = response.GetResponseStream())
    {
        graph = JsonHelper.Deserialize<MicrosoftClientUserData>(responseStream);
    }
}

var userData = new Dictionary<string, string>();
userData.Add("id", graph.Id == "" ? null : graph.Id);
userData.Add("username", graph.Name == "" ? null : graph.Name);
userData.Add("name", graph.Name == "" ? null : graph.Name);
userData.Add("link", graph.Link == null ? null : graph.Link.AbsoluteUri);
userData.Add("gender", graph.Gender == "" ? null : graph.Gender);
userData.Add("firstname", graph.FirstName == "" ? null : graph.FirstName);
userData.Add("lastname", graph.LastName == "" ? null : graph.LastName);

return userData;

}

我的理解是,这会获取所有请求的用户数据(基于指定的范围),因此它还应包含响应中的电子邮件。不幸的是,即使它确实如此,我也不知道如何从响应流中获取该信息......

那么,我如何阅读回复中的电子邮件(如果我在正确的轨道上)?

0 个答案:

没有答案