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;
        }
    }

推荐阅读