【问题标题】:Validating Google User with OAuth C# [closed]使用 OAuth C# 验证 Google 用户 [关闭]
【发布时间】:2013-09-25 15:03:48
【问题描述】:

我希望设置一个流程来通过 OAuth 从 Google 验证用户,这是我想要创建的预期行为。

用户转到我提供的网址,我的应用程序返回 Google 以查看他们是否已登录并在未登录时对他们进行身份验证,然后出现 Google 的“登录我”提示并且用户完成身份验证。

用户通过身份验证后,我想收集他们的基本信息(电子邮件、名字和姓氏)等。

一旦我有了它,我就会做其他事情,但我很好。

我已经阅读过,但我很难理解整个 OAuth 身份验证过程以及它是如何插入 Google 的。有人可以指出我想要得到的方向吗?

我已经在 Google API 中创建了一个产品并获得了一个客户端 ID 和密码,所以我想我已经准备好启动一个 C# 应用程序了。

【问题讨论】:

    标签: c# google-api oauth-2.0


    【解决方案1】:

    您需要的一切都包含在这个包中:http://dotnetopenauth.net/

    看看他们的例子,它会告诉你如何请求用户的部分信息,以及如何阅读它们。

    [编辑]

          const string CallbackParameter = "callback";
          const string Endpoint = "https://www.google.com/accounts/o8/id";
    
          using (var openid = new OpenIdRelyingParty())
          {
                var callbackUrl = new Uri(string.Format("{0}?{1}=true", _context.RequestUri.AbsoluteUri, CallbackParameter));
                var authRequest = openid.CreateRequest(Endpoint, new Realm(string.Format("{0}://{1}", _context.RequestUri.Scheme, _context.RequestUri.Authority)), callbackUrl);
    
                // Tell Google what we want
                var fetch = new FetchRequest();
                fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
                fetch.Attributes.AddRequired(WellKnownAttributes.Name.First);
                fetch.Attributes.AddRequired(WellKnownAttributes.Name.Last);
                authRequest.AddExtension(fetch);
    
                var response = authRequest.RedirectingResponse;
                var location = response.Headers["Location"];
    
                var fetch = response.GetExtension<FetchResponse>();
                if (fetch != null)
                {
                    Username = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email);
                    Email = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email);
                    FirstName = fetch.GetAttributeValue(WellKnownAttributes.Name.First);
                    LastName = fetch.GetAttributeValue(WellKnownAttributes.Name.Last);
                }
          }
    

    【讨论】:

    • 谢谢贾斯汀,我能拿到通讯录了。但是,从 Directory API 获取用户信息的过程似乎有所不同。你能做到吗?
    • 你具体要找哪些信息?用户的名字和姓氏,还是其他?
    • 贾斯汀,名字,姓氏和电子邮件。如果我能得到完整的个人资料会很酷,但那 3 个是最重要的。
    • @IsaacLevin - 我已经编辑了我的答案以包含一个示例。如果您需要任何帮助来理解其中的任何内容,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2021-07-21
    • 2011-06-23
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多