Google身份验证API:如何获取用户的Gmail地址

Google身份验证API:如何获取用户的Gmail地址

Google Authentication API: How to get the user's gmail address

我一直在研究Google身份验证API(AuthSub)...我的问题是,身份验证通过后,如何获取用户的帐户信息(至少是他们的Gmail地址)?

因为当前,我从身份验证过程中得到的只是一个令牌,该令牌使我可以访问我在范围内指定的任何Google服务,但是没有一种简单的方法可以获取用户的登录ID(Gmail地址)。 告诉...

如果可以,我可以通过哪些Google服务访问用户信息?


Google身份验证API是基于令牌的系统,用于对有效用户进行身份验证。 它没有公开任何其他允许将帐户持有者信息返回给授权者的接口。


您可以通过带有斧头扩展名的OpenID API来获取一些数据。 如果您正在使用其他方法进行身份验证,我发现最好的方法是调用https://www-opensocial.googleusercontent.com/api/people/@me/@self,它将获得您的姓名,电子邮件和图片。 进行身份验证时,请确保作用域中包含http://www-opensocial.googleusercontent.com/api


使用Google AppEngine GData服务,您可以请求用户授予您访问其Google Mail,日历,Picasa等的权限。在此处进行检查。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
    [ValidateInput(false)]
    public ActionResult Authenticate(string returnUrl)
    {
        try
        {
            logger.Info("" + returnUrl +"] LoginController : Authenticate method start ");
            var response = openid.GetResponse();
            if (response == null)
            {
                try
                {
                    string discoveryuri ="https://www.google.com/accounts/o8/id";
                    //OpenIdRelyingParty openid = new OpenIdRelyingParty();
                    var fetch = new FetchRequest();// new
                    var b = new UriBuilder(Request.Url) { Query ="" };
                    var req = openid.CreateRequest(discoveryuri, b.Uri, b.Uri);
                    fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
                    fetch.Attributes.AddRequired(WellKnownAttributes.Name.FullName);
                    req.AddExtension(fetch);
                    return req.RedirectingResponse.AsActionResult();
                }
                catch (ProtocolException ex)
                {
                    logger.ErrorFormat(" LoginController : Authenticate method has error, Exception:" + ex.ToString());
                    ViewData["Message"] = ex.Message;
                    return View("Login");
                }
            }
            else
            {
                logger.Info("" + returnUrl +"] LoginController : Authenticate method :when responce not  null ");
                switch (response.Status)
                {
                    case AuthenticationStatus.Authenticated:
                        logger.Info("" + response.Status +"] LoginController : Authenticate method : responce status ");
                        var fetchResponse = response.GetExtension<FetchResponse>();
                        string email = fetchResponse.GetAttributeValue(WellKnownAttributes.Contact.Email);
                        string userIPAddress = HttpContext.Request.UserHostAddress;
                        SecurityManager manager = new SecurityManager();                            
                        int userID = manager.IsValidUser(email);

                        if (userID != 0)
                        {
                            ViewBag.IsFailed ="False";
                            logger.Info("" + userID +"] LoginController : Authenticate method : user id id not null ");
                            Session["FriendlyIdentifier"] = response.FriendlyIdentifierForDisplay;
                            Session["UserEmail"] = email;

                            FormsAuthentication.SetAuthCookie(email, false);

                            WebSession.UserEmail = email;
                            WebSession.UserID = userID;

                            UserManager userManager = new UserManager();
                            WebSession.AssignedSites = userManager.GetAssignedSites(userID);



                            if (!string.IsNullOrEmpty(returnUrl))
                            {
                                logger.Info("" + returnUrl +"] LoginController : Authenticate method : retutn url not null then return Redirect  ");
                                return Redirect(returnUrl);
                            }
                            else
                            {
                                logger.Info("" + returnUrl +"] LoginController : Authenticate method : retutn url null then return RedirectToAction  ");
                                //
                                return Redirect("/Home");
                            }
                        }
                        else
                        {
                            ViewBag.IsFailed ="True";
                            logger.Info("" + returnUrl +"] LoginController : Authenticate method :user id null  ");
                            if (!string.IsNullOrEmpty(returnUrl))
                            {
                                logger.Info("" + returnUrl +"] LoginController : Authenticate method :and return Redirect  ");
                                return Redirect(returnUrl);
                            }
                            else
                            {
                                logger.Info("" + returnUrl +"] LoginController : Authenticate method :and return RedirectToAction  ");

                                return View("Index");

                            }
                        }

                    case AuthenticationStatus.Canceled:
                        logger.Info("" + response.Status +"] LoginController : Authenticate method : AuthenticationStatus.Canceled  and return view ");
                        ViewData["Message"] ="Canceled at provider";
                        return View("Login");
                    case AuthenticationStatus.Failed:
                        logger.Info("" + response.Status +"] LoginController : Authenticate method : AuthenticationStatus.Failed and return view  ");
                        logger.Error(response.Exception.Message);
                        ViewData["Message"] = response.Exception.Message;
                        return View("Login");
                }

            }
            logger.Info("" + returnUrl +"] LoginController : Authenticate method end and return  EmptyResult");
            return new EmptyResult();
        }
        catch (Exception ex)
        {
            logger.Error(" LoginController : Authenticate method", ex);
            throw;
        }
    }

推荐阅读

    linux命令删除用户组?

    linux命令删除用户组?,管理,密码,系统,用户组,用户,概念,命令,文件,管理员,

    linux中用户创建命令?

    linux中用户创建命令?,密码,系统,用户,软件,命令,联系方式,管理,信息,用户

    linux命令修改地址?

    linux命令修改地址?,地址,系统,网络,代码,信息,服务,基础,管理,命令,虚拟机,

    linux注销命令用户?

    linux注销命令用户?,系统,服务,密码,地址,工作,命令,状态,工具,信息,基础,lin

    linux命令行创建用户?

    linux命令行创建用户?,系统,密码,软件,新增,用户,联系方式,管理,用户名,命

    linux系统用户命令?

    linux系统用户命令?,系统,工作,地址,信息,管理,命令,目录,时间,电脑,名称,请

    linux命令所有用户?

    linux命令所有用户?,系统,密码,信息,情况,名称,命令,用户,时间,地址,位置,如

    linux命令进入用户?

    linux命令进入用户?,系统,密码,用户,地址,信息,软件,命令,用户名,联系方式,

    linux命令用户管理?

    linux命令用户管理?,系统,密码,管理,工作,信息,地址,工具,命令,用户,基础,LIn

    linux用户与组的命令?

    linux用户与组的命令?,管理,系统,名称,用户组,密码,用户,命令,情况,信息,单

    获取linux时间命令行?

    获取linux时间命令行?,时间,系统,信息,命令,工具,工作,代码,数据,服务,环境,L

    linux添加用户的命令?

    linux添加用户的命令?,密码,系统,软件,联系方式,用户,新增,信息,管理人员,

    linux把地址变成命令?

    linux把地址变成命令?,地址,系统,代码,服务,网络,密码,命令,设备,表示,计算

    linux用户退出的命令?

    linux用户退出的命令?,系统,密码,命令,用户,发行,电脑,第三,地址,软件,信息,l

    linux看系统用户命令?

    linux看系统用户命令?,系统,信息,密码,命令,服务,名称,网络,情况,软件,工具,L

    linux赋权用户命令?

    linux赋权用户命令?,系统,密码,用户,权限,地址,状态,数字,软件,管理,电脑,Lin

    linux命令行获取id?

    linux命令行获取id?,系统,信息,管理,名称,命令,进程,代码,状态,下来,单位,如

    linux组加用户命令?

    linux组加用户命令?,系统,密码,联系方式,用户,软件,管理,命令,用户名,用户

    linux命令中添加用户?

    linux命令中添加用户?,系统,密码,软件,用户,命令,信息,目录,用户名,账号,文