如何使用ASP.MVC和DotNetOpenAuth从Facebook获取电子邮件地址

时间:2013-02-02 21:53:44

标签: asp.net-mvc dotnetopenauth

我正在尝试在我的应用中设置身份验证。我发布到外部网站工作(脸书和谷歌)

[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get), ValidateInput(false)]
    public ActionResult OpenIdLogOn(string returnUrl)
    {
        var redirectUrl = "~/Companies/LogIn";
        var provider = Request.Form["provider"];
        if (Common.IsNull(provider))
            return View();            
        OpenAuth.RequestAuthentication(provider, redirectUrl);
        return View();
    }

这可以通过弄清楚点击了什么按钮(使用facebook / Google登录)然后请求身份验证。当身份验证完成后我收到回复邮件时,我会尝试检索电子邮件地址。

public ActionResult LogIn()
    {
        var redirectUrl = "~/Companies/LogIn/OpenIdLogOn";
        var response = Response;
        var userEmail = Request.Params[16];
        if (!String.IsNullOrEmpty(ReturnUrl))
        {                
            Response.Redirect("~/Bloggers");
        }

        ViewBag.OAuthProviders = OpenAuth.AuthenticationClients.GetAll().ToList();
        return View();
    }

如果我使用google登录,则以下内容将起作用 -

var userEmail = Request.Params[16];

但Facebook不会发回电子邮件。好吧,我无法在请求中看到它。必须有比使用Request.Params[16];更好的方法 也。非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

无法看到OpenAuth是什么,很难说新代码应该是什么样子。但足以说明你绝对不应该直接从请求中删除电子邮件地址。当您这样做时,OAuth和OpenID提供的所有安全性都毫无价值。您需要从正在使用的安全库中获取电子邮件地址。

对于Google,这意味着从响应的FetchResponseClaimsResponse扩展中获取它。

对于Facebook,这意味着使用从登录返回的访问令牌从Facebook 获取电子邮件地址,并验证受众群体字段,以确保访问令牌不会被重定向到您的网站用户欺骗攻击的一部分。