Asp.net mvc 4 ASP.NET MVC4 OAuth Microsoft(Live)帐户-获取用户电子邮件
我正在尝试为我的ASP.NET MVC4网站使用Microsoft ID实现OAuth身份验证。到目前为止,使用Microsoft帐户登录仍然有效。但我需要获得一些额外的用户数据(特别是用户帐户或首选电子邮件地址) 我正在使用live.domains作为我的电子邮件服务。所以我用我的域名为我的用户创建了电子邮件。现在我想让这些用户能够使用他们的电子邮件帐户(使用OAuth)登录到该站点 注意:我的web服务器不支持asp.net 4.5,因此我只能使用4.0,无法使用asp.net的LiveSDK(据我所知) 这个想法是这样的:Asp.net mvc 4 ASP.NET MVC4 OAuth Microsoft(Live)帐户-获取用户电子邮件,asp.net-mvc-4,oauth-2.0,windows-live-id,liveid,Asp.net Mvc 4,Oauth 2.0,Windows Live Id,Liveid,我正在尝试为我的ASP.NET MVC4网站使用Microsoft ID实现OAuth身份验证。到目前为止,使用Microsoft帐户登录仍然有效。但我需要获得一些额外的用户数据(特别是用户帐户或首选电子邮件地址) 我正在使用live.domains作为我的电子邮件服务。所以我用我的域名为我的用户创建了电子邮件。现在我想让这些用户能够使用他们的电子邮件帐户(使用OAuth)登录到该站点 注意:我的web服务器不支持asp.net 4.5,因此我只能使用4.0,无法使用asp.net的LiveSD
- 使用内置的OAuth功能登录用户
- 获取他们的帐户电子邮件地址,并检查它是否是来自我的域的电子邮件
- 如果不是我的域名,请拒绝注册
- 如果电子邮件来自我的域,请允许用户注册并正常进行
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;
受保护的重写IDictionary GetUserData(string accessToken)
{
MicrosoftClientUserData图;
var请求=
WebRequest.Create(“https://apis.live.net/v5.0/me?access_token=“+CustomHelpers.EscapeUriDataStringRfc3986(accessToken));
使用(var response=request.GetResponse())
{
使用(var responseStream=response.GetResponseStream())
{
graph=JsonHelper.Deserialize(responseStream);
}
}
var userData=newdictionary();
userData.Add(“id”,graph.id==”?null:graph.id);
userData.Add(“用户名”,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(“性别”,graph.gender==”?空:graph.gender);
userData.Add(“firstname”,graph.firstname==”?null:graph.firstname);
userData.Add(“lastname”,graph.lastname==”?null:graph.lastname);
返回用户数据;
}
我的理解是,这会获取所有请求的用户数据(基于指定的范围),因此它还应该在响应中包含电子邮件。不幸的是,即使是这样,我也不知道如何从响应流中获取这些信息
那么,我如何阅读回复中的电子邮件(如果我的思路正确的话)?检查以下答案: